想成间的制约关系:当线程并发执行时,需要共享资源和合作
1.间接制约,当多个线程需要同一资源时,如果某一线程正在使用其资源,那么其它线程就只有等待,直到线程释放资源,如线程都使用打印机,但
在同一个时候,只允许一个线程使用
2. 直接制约,比如线程2需要使用线程1的计算结果,那么线程2在线程1提供计算结果前处于阻塞状态。
间接制约就是互斥,直接制约就是同步,同步实际上是包含互斥的
实现同步互斥的四个方法,关键段(CS),事件,互斥量,信号量
关键段CS:
Initialize-CriticalSection
Delete-CriticalSection
Enter-CriticalSection
Leave-CriticalSection
互斥量Mutex
CreateMutex
CloseHandle
WaitForSingleObject 等待
ReleaseMutex
事件
CreateEvent
CloseHandle
SetEvent 使事件触发
ResetEvent 使事件未触发
信号量
Create-Semaphore
CloseHandle
WaitForSingleObject 信号量--
Release-Semaphore 信号量++