其中先启动TimeTrigger线程,用的是排他锁,另外两个线程用的是共享锁,可以并发。整体来看就是TimeTrigger完后,Thread1和Thread2并发一次。主要在于用一个线程控制另外多个线程的并发,尝试开设线程之间地位不平等时,线程的并发处理,如果加锁加的好的话,是可以达到效果的。
// Test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <stdio.h> CONDITION_VARIABLE cv; SRWLOCK slock; DWORD WINAPI TimeTrigger(LPVOID) { while(true) { Sleep(2); AcquireSRWLockExclusive(&slock); Sleep(20); ReleaseSRWLockExclusive(&slock); WakeAllConditionVariable(&cv); } } DWORD WINAPI Thread1(LPVOID) { int a = 0; while(true) { AcquireSRWLockShared(&slock); SleepConditionVariableSRW(&cv,&slock,INFINITE,CONDITION_VARIABLE_LOCKMODE_SHARED); a++; printf("thread1: a = %d\n",a); ReleaseSRWLockShared(&slock); } } DWORD WINAPI Thread2(LPVOID) { int b = 0; while(true) { AcquireSRWLockShared(&slock); SleepConditionVariableSRW(&cv,&slock,INFINITE,CONDITION_VARIABLE_LOCKMODE_SHARED); b++; printf("thread2: b = %d\n",b); ReleaseSRWLockShared(&slock); } } int _tmain(int argc, _TCHAR* argv[]) { InitializeSRWLock(&slock); CreateThread(NULL,0,TimeTrigger,NULL,0,NULL); CreateThread(NULL,0,Thread1,NULL,0,NULL); CreateThread(NULL,0,Thread2,NULL,0,NULL); if(getchar()) { }; return 0; }