VC线程同步方法总结

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();

以上说法若有任何错误,还请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值