信号量与临界区,mutex不同,信号量在同一时刻运行多个线程访问同一资源,信号量的使用只要涉及到CreateSemaphore() 、OpenSemaphore()、ReleaseSemaphore()、WaitForSingleObject()和WaitForMultipleObjects()等函数。
信号量不仅可以实现对代码的保护,还可以利用信号量实现进程单实例运行。
一 利用信号量实现同步,代码保护
(1)CreateSemaphore 创建一个信号量内核对象
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // 安全属性指针
LONG lInitialCount, // 初始计数
LONG lMaximumCount, // 最大计数
LPCTSTR lpName // 对象名指针
);
(2)ReleaseSemaphore
BOOL ReleaseSemaphore(
HANDLE hSemaphore, // 信号量句柄
LONG lReleaseCount, // 计数递增数量
LPLONG lpPreviousCount // 先前计数
);
在线程离开对共享资源的处理时,必须通过ReleaseSemaphore()来增加当前可用资源计数。否则将会出现当前正在处理共享资源的实际线程数并没有达到要限制的数值,而其他线程却因