【问题标题】:MUTEX LOCK and MUTEX UNLOCK互斥锁和互斥解锁
【发布时间】:2018-05-23 06:24:51
【问题描述】:

在极其不幸的情况下会发生什么,即两个进程恰好同时到达。这不太可能,但很有可能会不时发生。更巧合的是,让我们假设锁是 OPEN 的,这样两个进程都会找到可用的锁。发生什么了?

【问题讨论】:

    标签: mutex


    【解决方案1】:

    使用原子操作实现的互斥锁。不同的处理器架构以不同的方式实现这一点,但无论处理器做什么,在较低级别上总是有一个总线仲裁器硬件必须为所有同时访问的内存选择正确的顺序。

    因此,即使两个处理器在完全相同的时间访问同一个互斥体,总线仲裁器也会选择谁是第一个,谁是第二个。

    最后,什么都不会发生在完全相同的时刻——一切都是有序的。


    您可以在Fixing Gap in knowledge about C/C++ and register access 阅读有关内存访问如何工作的更多信息

    简而言之,处理器不直接访问内存,而是要求内存控制器执行此操作。当两个处理器同时要求内存设备做某事时,它必须先选择其中一个。

    【讨论】:

      【解决方案2】:

      锁定互斥锁是一个原子过程,因此即使两个线程设法恰好同时请求互斥锁,其中一个会成功,另一个会成功失败——也就是说,一个会锁定互斥体,另一个不会。

      任何其他结果都意味着互斥体完全且不可撤销地被破坏 - 即,它根本不是一个真正的互斥体。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-17
        • 2022-07-31
        • 2021-02-03
        • 2015-10-26
        • 2015-09-26
        • 2010-11-22
        • 1970-01-01
        相关资源
        最近更新 更多