[ACE程序员教程笔记]使用ACE_Thread_Mutex访问子线程中的数据
2011-01-08 16:24
316 查看
每一个子线程中会对全局变量g_nCounter进行递增三次,使用Mutex保证在同一时刻只能有一个线程递增、输出这个值,因此,实现了数据处理的串行化,每一次子函数的输出必定是完整的3次,不会导致输出结果混乱的情况。
#include "stdafx.h" #include "ace/ace.h" #include "ace/Thread.h" #include "ace/Synch.h" #include "ace/Log_Msg.h" ACE_Thread_Mutex tmGuard; int g_nCounter; //子线程处理函数,在此函数中采用mutex保证每次打印三个连续的整数 //中间的输出不会被打断 static void* ChildProc(void* pParam) { //如果没有mutext,输出结果将会有很大的不同,无法保证输出的完整性! tmGuard.acquire(); for (int i = 0; i < 3;i++) { ACE_DEBUG((LM_DEBUG,ACE_TEXT("(%t) = %d/n"),g_nCounter++)); } tmGuard.release(); return NULL; } //创建的线程个数 #define NUM_THRD 100 int ACE_TMAIN(int argc, ACE_TCHAR* argv[]) { ACE_thread_t* pThreadIDs = new ACE_thread_t[NUM_THRD]; ACE_hthread_t* pHandles = new ACE_hthread_t[NUM_THRD]; //启动NUM_THRD个线程 if (ACE_Thread::spawn_n(pThreadIDs,NUM_THRD,(ACE_THR_FUNC)ChildProc,0, THR_JOINABLE|THR_NEW_LWP, ACE_DEFAULT_THREAD_PRIORITY, 0,0, pHandles) == -1 ) { ACE_DEBUG((LM_DEBUG,ACE_TEXT("spawn_n error!/n"))); return -1; } //等待所有的子线程处理完毕,主线程才退出 for (int i = 0; i < NUM_THRD;i++) { ACE_Thread::join(pHandles[i]); } return 0; }
相关文章推荐
- [ACE程序员教程笔记]使用ACE_Thread创建多个线程
- [ACE程序员教程笔记]使用ACE_Thread_Manager创建线程组
- [ACE程序员教程笔记]ACE_Connector使用一个连接多个线程发送数据
- [ACE程序员教程笔记]使用ACE_Connector连接服务器
- [ACE程序员教程笔记]使用ACE_Acceptor分离连接和事件处理
- [ACE程序员教程笔记]使用ACE_Acceptor建立连接并处理连接请求
- [ACE程序员教程笔记]使用ACE_Guard访问子线程
- C# 学习笔记 -- 第三天 申明和使用数据
- [ACE程序员教程笔记]使用Reactor实现Accept和数据读取
- Oracle的小笔记,模糊处理人名,电话,地址之类字段数据时可以使用的SQL语句
- 笔记20 使用ArrayAdapter、ArrayAdapter为ListView添加数据
- Easyui笔记4:实现表格内combobox数据的动态切换(getEditor的使用)
- SMP3.0学习笔记之十二 使用AppBuilder读取OData服务的数据
- D3.js学习笔记(二)——使用绑定在DOM上的数据
- C#中的多线程使用 -- Thread 类: 使用回调函数从一个线程中检索数据
- gridview使用数据源绑定并操作数据(笔记)
- Android笔记三.不同Activity之间的传递数据(Bundle对象的使用)
- Python - Thread模块使用笔记
- MySQL笔记之数据备份与还原的使用详解
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组