为什么我们需要Windows中的互斥和事件? 从这个意义上来说,Windows只有互斥体吗? 对于互斥体无法完成的事件,可以做些什么?
事件允许线程阻塞,直到某个事件(因此名称)被广播。 阻塞事件意味着“当有事情发生时唤醒我”; 你希望能够入睡。 事件是一种信号机制,它为互斥体上找不到的信号提供支持,比如一旦有人在等待唤醒就自动清除信号。 此外,API允许阻塞,直到发送几个事件中的一个或全部 。
互斥(互斥)则是共享资源的范围协调机制。 认为交易。 你不希望等待,但想访问一些共享资源,只有在其他人已经访问它的情况下,你阻止了。
如果你试图用互斥模拟一个事件,你会面临这样的问题,一旦你获得了锁定(当时应该表示“事件发信号”),那么在你释放该锁之前,你要保留其他人。 这不是发信号事件的语义; 它可能保持张贴状态,并且每个测试线程的“门”将被打开,而不会获得任何锁定。
互斥专用于进程间同步。 这是内核模式对象。 一个进程中的多线程同步事件。 这是用户模式对象。
互斥对象是非常一般的,而沉重,另一方面事件对象是更轻。 在大多数情况下,您必须使用用户模式同步,因为它提供的CPU周期较少。