多线程通信——信号量

来源:互联网 发布:知百家传媒 编辑:程序博客网 时间:2024/06/05 06:54

当当前资源的数量大于0的时候,等待信号量的线程可以获得一个资源并继续执行,信号量的当前资源数量将减1,如果当前资源的数量为0,则等待信号量的线程将处于等待状态,直到有线程释放信号量,使信号量标识的资源数量大于0

HANDLE CreateSemaphore(  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,  LONG lInitialCount,  LONG lMaximumCount,   LPCTSTR lpName );

HANDLE OpenSemaphore(  DWORD dwDesiredAccess,   BOOL bInheritHandle,   LPCTSTR lpName );
BOOL ReleaseSemaphore(  HANDLE hSemaphore,  LONG lReleaseCount,  LPLONG lpPreviousCount);

程序实例:每个线程递增int变量,但是两个值的差不能超过5

HANDLE handle1 = CreateSemaphore(NULL, 5, 10, "se1");HANDLE handle2  = CreateSemaphore(NULL, 5, 10, "se2");DWORD WINAPI ThreadFuncSem1(PVOID pParam){int ii = 0;for (int i=0; i < 100; i++){WaitForSingleObject(handle1, INFINITE);ReleaseSemaphore(handle2, 1, NULL);ii++;}return ii;}DWORD WINAPI ThreadFuncSem2(PVOID pParam){int iii = 0;for (int i=0; i < 100; i++){WaitForSingleObject(handle2, INFINITE);ReleaseSemaphore(handle1, 1, NULL);iii++;}return iii;}int main(){HANDLE tHandle1 = CreateThread(NULL, 0, ThreadFuncSem1, NULL, 0, NULL);HANDLE tHandle2 = CreateThread(NULL, 0, ThreadFuncSem2, NULL, 0, NULL);        return 0;}


	
				
		
原创粉丝点击