Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mutex 互斥锁和互斥解锁_Mutex - Fatal编程技术网

Mutex 互斥锁和互斥解锁

Mutex 互斥锁和互斥解锁,mutex,Mutex,如果两个过程恰好在同一时刻到达,那么在这种极为不幸的情况下会发生什么呢。这是不可能的,但可能会不时发生。更巧合的是,让我们假设锁是打开的,以便两个进程都能找到可用的锁。会发生什么 锁定互斥体是一个原子过程,因此,即使两个线程设法在完全相同的时间请求互斥体,其中一个线程将成功,另一个线程将失败——也就是说,一个线程将锁定互斥体,而另一个线程不会 任何其他结果都意味着互斥体被彻底地、不可挽回地破坏了——也就是说,它根本不是真正的互斥体。使用原子操作实现的互斥体。不同的处理器体系结构以不同的方式实现这

如果两个过程恰好在同一时刻到达,那么在这种极为不幸的情况下会发生什么呢。这是不可能的,但可能会不时发生。更巧合的是,让我们假设锁是打开的,以便两个进程都能找到可用的锁。会发生什么

锁定互斥体是一个原子过程,因此,即使两个线程设法在完全相同的时间请求互斥体,其中一个线程将成功,另一个线程将失败——也就是说,一个线程将锁定互斥体,而另一个线程不会

任何其他结果都意味着互斥体被彻底地、不可挽回地破坏了——也就是说,它根本不是真正的互斥体。

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

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

最后,在同一时刻没有任何事情发生——一切都井然有序


您可以阅读更多关于内存访问如何工作的信息

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