VC线程同步方法总结
2014-05-19 09:05
246 查看
VC线程同步方法总结:
有四种同步方法:互斥体(Mutex),事件(Event),临界区(Critical Section),以及信号量(Semaphore)。
注:以下所说的“全局变量”也可换为局部变量,只要各线程(包括主线程)能访问即可。
1、使用Mutex
定义全局变量HANDLE hMutex;
在主线程中调用hMutex = CreateMutex(NULL, FALSE, NULL);
(参数的具体含义请查看MSDN)
然后,在子线程中:
WaitForSingleObject(hMutex);
[[受保护的代码]]
ReleaseMutex(hMutex);
2、使用Event
定义全局变量HANDLE hEvent;
在主线中调用hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);
(参数的具体含义请查看MSDN)
然后,在子线程中:
WaitForSingleObject(hEvent);
[[受保护的代码]]
ResetEvent(hEvent);
3、使用CRITICAL_SECTION
定义全局变量CRITICAL_SECTION cs;
在主线中调用InitializeCriticalSection(&cs);
然后,在子线程中:
EnterCriticalSection(&cs);
[[受保护的代码]]
LeaveCriticalSection(&cs);
4、使用Semaphore
定义全局变量HANDLE hSemaphore;
在主线中调用hSemaphore = CreateSemaphore(NULL,lInitialCount,lMaximumCount,NULL);
(参数的具体含义请查看MSDN)
然后,在子线程中:
WaitForSingleObject(hSemaphore);
[[受保护的代码]]
ReleaseSemaphore(hSemaphore,lReleaseCount,NULL);
MFC类的情况:
1、使用CMutex
定义全局变量CMutex mutex;
然后,在子线程中:
mutex.Lock();
[[受保护的代码]]
mutex.Unlock();
2、使用CEvent
由于事件(Event)的用法比较复杂,暂时还没弄清楚。
3、使用CCriticalSection
定义全局变量CCriticalSection cs;
然后,在子线程中:
cs.Lock();
[[受保护的代码]]
cs.Unlock();
4、使用CSemaphore
定义全局变量CSemaphore semaphore(lInitialCount, lMaximumCount);
(参数的具体含义请查看MSDN)
然后,在子线程中:
semaphore.Lock();
[[受保护的代码]]
semaphore.Unlock();
有四种同步方法:互斥体(Mutex),事件(Event),临界区(Critical Section),以及信号量(Semaphore)。
注:以下所说的“全局变量”也可换为局部变量,只要各线程(包括主线程)能访问即可。
1、使用Mutex
定义全局变量HANDLE hMutex;
在主线程中调用hMutex = CreateMutex(NULL, FALSE, NULL);
(参数的具体含义请查看MSDN)
然后,在子线程中:
WaitForSingleObject(hMutex);
[[受保护的代码]]
ReleaseMutex(hMutex);
2、使用Event
定义全局变量HANDLE hEvent;
在主线中调用hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);
(参数的具体含义请查看MSDN)
然后,在子线程中:
WaitForSingleObject(hEvent);
[[受保护的代码]]
ResetEvent(hEvent);
3、使用CRITICAL_SECTION
定义全局变量CRITICAL_SECTION cs;
在主线中调用InitializeCriticalSection(&cs);
然后,在子线程中:
EnterCriticalSection(&cs);
[[受保护的代码]]
LeaveCriticalSection(&cs);
4、使用Semaphore
定义全局变量HANDLE hSemaphore;
在主线中调用hSemaphore = CreateSemaphore(NULL,lInitialCount,lMaximumCount,NULL);
(参数的具体含义请查看MSDN)
然后,在子线程中:
WaitForSingleObject(hSemaphore);
[[受保护的代码]]
ReleaseSemaphore(hSemaphore,lReleaseCount,NULL);
MFC类的情况:
1、使用CMutex
定义全局变量CMutex mutex;
然后,在子线程中:
mutex.Lock();
[[受保护的代码]]
mutex.Unlock();
2、使用CEvent
由于事件(Event)的用法比较复杂,暂时还没弄清楚。
3、使用CCriticalSection
定义全局变量CCriticalSection cs;
然后,在子线程中:
cs.Lock();
[[受保护的代码]]
cs.Unlock();
4、使用CSemaphore
定义全局变量CSemaphore semaphore(lInitialCount, lMaximumCount);
(参数的具体含义请查看MSDN)
然后,在子线程中:
semaphore.Lock();
[[受保护的代码]]
semaphore.Unlock();
相关文章推荐
- VC线程同步方法总结
- VC线程同步方法总结
- vc常用方法和技巧总结
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC线程同步方法
- VC连接数据库的两种方法总结
- VC下线程同步的三种方法(互斥、事件、临界区)
- 来总结一下在VC中调用COM组件的方法(大家来补充)(转载)
- VC++中四种进程或线程同步互斥的控制方法
- 线程同步 .net 实现方法的总结 (转载的)
- 线程同步的几种方法的总结
- VC++中四种进程或线程同步互斥的控制方法
- VC++ MFC 多线程及线程同步(详细、全面总结!)
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC 贴图方法总结
- VC中编写Non MFC DLL的方法总结 推荐
- VC++中四种进程或线程同步互斥的控制方法
- VC调试方法技巧和常见问题总结分析(转)
- 总结:VC#中从Clipboard保存获取数据的方法
- VC++ 调试方法总结