Event能做的事情,mutex一样做。
semaphore能做的事情,mutex一样做。那么为什么还要提出Event,semaphore呢? mutex就是一个计数器,semaphore不也是吗,本质上有什么事情是mutex做不到的,必须借助Event和semaphore才能表达的呢?请指教。

解决方案 »

  1.   

    当然不一样了,从功能上,使用环境都不一样,建议看看msdn了,“mutex就是一个计数器”谁说的?简单的说mutex叫互斥体,可在是进程间使用。event叫事件,semaphore叫信号量,event和semaphore到可以说有相近之处,但也要明确各有特点和使用场合。event可以理解为事件通知消息,就是A等待事件触发,B干完活后触发事件,A再干活,semaphore可以理解为资源占用的等待和通知消息,就像上厕所,A敲门,里面3个坑满了,就在外边等,B完事了,出来,A再进去。看个人理解了。
      

  2.   

    mutex叫互斥体用来声明临界资源,
    event叫事件,和semaphore相近,个人觉得是对semaphore赋予具体现实含义
    semaphore是用来同步线程间通信的
      

  3.   

    这问题我以前面试的时候也碰到过,除了楼上讲的几点,使用场合也不同,我记得速度和效率也不同,记得是semaphore最快.
      

  4.   

    lz貌似又发了一遍?http://hondrif82q.spaces.live.com/blog/cns!776E82726DE60562!138.entry
      

  5.   

    知道了。2L和6L的帖子非常好,可以这样形容。关键的,需要被同步访问的资源就好比是公共厕所:1. CRITICAL_SECTION: 公厕管理人员每次允许一个人进入,直到他出去了,下一个人才可以进入。
    2. Event: 他告诉你公厕里面当前的状态。但是,你可以闯进去。他不会管你。要干什么取决于你。
    3. Semaphore: 他允许公厕里面有N个人同时用,再多的人就必须排队。
    4. mutex: 厕所是属于他的。他用的时候,别人决不能进去。他不用的时候,得到他的允许,别人才能进去。他也可以选择让厕所空着。
      

  6.   

    Semaphore是个更复杂的Event+计数器。
    mutex是更复杂的Critical section+互斥机制。