【问题标题】:Mutex and Event on WindowsWindows 上的互斥和事件
【发布时间】:2010-09-16 14:07:10
【问题描述】:

为什么我们需要在 Windows 中使用互斥体和事件?从某种意义上说,Windows 不能只有 Mutex 吗?使用 Mutex 无法完成的事件可以做什么?

【问题讨论】:

    标签: windows events mutex


    【解决方案1】:

    Events 允许线程阻塞,直到某个事件(因此得名)被广播。阻止事件意味着“发生某事时唤醒我”;你希望被哄睡。事件是一种信号机制,并提供了对互斥锁所没有的这种支持,例如,一旦等待它的人被唤醒,它就能够自动清除信号。此外,API 允许阻塞直到 其中一个所有 个事件发出信号。

    另一方面,互斥体(互斥)是共享资源的范围协调机制。想想交易。您不希望等待但想要访问某些共享资源,并且只有在其他人已经在访问它的情况下,您才会阻止。

    如果您尝试使用互斥锁来模拟事件,您将面临这样的问题:一旦您获得锁(何时应该意味着“事件发出信号”),在您释放该锁之前,您会将其他人拒之门外.这不是发出事件信号的语义;它可能会保持发布,并且“门”将为事件的每个线程测试打开,而无需获取任何锁。

    【讨论】:

    • “是一种共享资源的范围协调机制。想想事务”……你也写了this吗?
    【解决方案2】:

    Mutex 专用于进程间同步。这是内核模式对象。 一个进程内的多线程同步事件。这是用户模式对象。

    Mutex 对象非常通用且重,而 Event 对象则轻得多。在大多数情况下,您必须使用用户模式同步,因为它提供的 CPU 周期更少。

    【讨论】:

    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多