在非常不幸的情况下发生的事情是两个进程完全到达&恰恰相同的时刻。这不太可能,但概率上可能会不时发生。更巧合的是,我们假设锁是OPEN,这样两个进程都可以找到锁。怎么了?
答案 0 :(得分:0)
锁定互斥锁是一个原子进程,所以即使两个线程设法同时完全请求互斥锁,其中一个将成功,另一个将成功失败 - 也就是说,一个人会锁定互斥锁,另一个则不会。
任何其他结果都意味着互斥体完全不可挽回地被破坏 - 即,它根本不是一个互斥体。
答案 1 :(得分:0)
使用原子操作实现的互斥锁。不同的处理器架构以不同的方式实现这一点,但无论处理器做什么,在较低层次上总是有一个总线仲裁器硬件必须为所有同时存储器访问选择正确的顺序。
因此,即使两个处理器在同一时刻访问同一个互斥锁,总线仲裁器也会选择谁是第一个,谁将成为第二个。
最后,在同一时刻没有任何事情发生 - 一切都是有序的。
您可以在Fixing Gap in knowledge about C/C++ and register access
详细了解内存访问的工作原理简而言之,处理器不直接访问内存,而是要求内存控制器执行此操作。当两个处理器要求存储设备同时执行某些操作时,必须首先选择其中一个。