您的位置:首页 > 其它

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: