同步机制

来源:互联网 发布:花粉 网络 编辑:程序博客网 时间:2024/05/01 15:32

摘自 win32多线程程序设计

Critical Section 

                    Critical section  (临界区)用来实现“排他性占有”。适用范围是单一进程  的各线程之间。它是: 


                       i  一个局部性对象,不是一个核心对象。  

                       i  快速而有效率。  

                       i  不能够同时有一个以上的 critical  section  被等待。  

                       i  无法侦测是否已被某个线程放弃。  

                        

                   Mutex
 Mutex  是一个核心对象,可以在不同的线程之间实现“排他性占有”,甚 至即使那些线程分属不同进程。它是:  
  i  一个核心对象。 
                       i  如果拥有 mu tex   的那个线程结束,则会产生一个 “abandoned”  错 误信息。  

                       i  可以使用 Wait...()       等待一个 mu tex 。  

                       i  可以具名,因此可以被其他进程开启。  

                       i  只能被拥有它的那个线程释放(released )。  

                        

                   Semaphore

                        
                      Semaphore  被用来追踪有限的资源。它是:  

                        
                       i  一个核心对象。  

                       i  没有拥有者。 
 i  可以具名,因此可以被其他进程开启。  
可以被任何一个线程释放(released )。  

       

Event Object

       
      Event object  通常使用于 overlapped  I/O  (第6章),或用来设计某些自定

义的同步对象。它是:  

       
      i  一个核心对象。  

      i  完全在程序掌控之下。  

      i  适用于设计新的同步对象。  

      i    “要求苏醒”的请求并不会被储存起来,可能会遗失掉。  

      i  可以具名,因此可以被其他进程开启。  

       

Interlocked Variable

       
      如果 Interlocked...()     函数被使用于所谓的 spin-lock,那么它们只是一种同

步机制。所谓 spin-lock             是一种 busy  loop,被预期在极短时间内执行,所以有

最小的额外负担(overhead)。系统核心偶尔会使用它们。除此之外,interlocked  

variables  主要用于引用计数。它们:  

       
      i   允许对 4        字节的数值有些基本的同步操作,不需动用到 critical  

section  或 mu tex  之类。  

      i  在 SMP       (Symmetric Multi-Processors)操作系统中亦可有效运作。