C++ 操作系统进程中线程同步的四种方式

来源:互联网 发布:北京java测试薪资 编辑:程序博客网 时间:2024/05/17 04:31

线程同步的定义:

      同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。“同”字从字面上容易理解为一起动作其实不是,“同”字应是指协同、协助、互相配合。如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。
       所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。


线程同步的四种方式:

1:临界区

      当多个线程访问一个独占性共享资源时,可以使用临界区对象,拥有临界区的线程可以访问被保护起来的资源或代码段,若其他线程想访问,则被挂起,直到拥有临界区的线程放弃临界区为止

2:事件

      事件机制,则允许一个线程在处理完一个任务之后,主动唤醒另外一个线程执行任务。利用事件机制,线程A 可以通知线程B何时更新数据

3:互斥量

      互斥对象和临界区对象非常相似,只是允许在线程中使用,而临界区只限与同一进程的各个线程之间使用,节省时间,增加效率

4:信号量

      当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象。当计数器为0时,所控制的资源的访问尝试被放入到一个队列中等待,直到超时或计数器不为0为止

1 0