一直不是很搞的清楚线程同步与资源互斥,不过好像这两个也是一个统一的内容。
1.创建线程
线程同步首先要有多线程为前提,如何创建线程:CreateThread函数(如果下文不需要引用句柄,可以提前关闭)
2.互斥对象(可以用来保护要操作的资源)
a.实例化互斥对象 HANDLE hMutex
b.CreateMutex
c. WaitforSingleObject
msdn对他的解释,作用为:I. The specified obj is in he signaled state
II. The time-out interval elapses
在这两种情况下,都会返回互斥对象句柄,否则的话,线程一直等待
d. ReleaseMutex
注:互斥对象只有拥有者才有释放权限
计数器 :1 拥有 +1
2 wait +1
3 Release -1 计数值为0 的时候才可以请求到互斥对象
若线程获得互斥对象拥有权,但是线程结束没有释放,系统会自动释放 -1,也可以通过wait函数的返回值来判断
3.事件对象(有信号才能获得)
a. 实例化 HANDLE gEvent
b.gxxx=CreateEvent();
c.SetEvent(设置有信号)
d.ResetEvent(设置无信号)
注:所有事件都可以请求到信号,在人工事件设置有信号状态下
自动重置事件是同步事件的一般做法通过,参数设置+ResetEvent来实现
4. 关键代码段
a. 设置全局CRITICAL_SECTION gCs
b. InitialCriticalSection()
通过EnterCriticalSection和LeaveCriticalSection来实现关键代码段
c.DeleteCriticalSection()