mfc线程同步与资源互斥

来源:互联网 发布:0基础学java有多难 编辑:程序博客网 时间:2024/04/29 08:32

一直不是很搞的清楚线程同步与资源互斥,不过好像这两个也是一个统一的内容。


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()