Multithreading 互斥和signal()和wait()操作
关于互斥体,我有两个问题: 1.当互斥变量等于1时,我们对它执行signal()操作,会发生什么?Multithreading 互斥和signal()和wait()操作,multithreading,mutex,semaphore,Multithreading,Mutex,Semaphore,关于互斥体,我有两个问题: 1.当互斥变量等于1时,我们对它执行signal()操作,会发生什么? 2.当互斥量等于0时,我们执行wait(),线程被阻塞,互斥量保持为0。对的一段时间后,另一个线程执行signal()操作,然后释放阻塞。现在互斥锁的值是多少?0还是1 所以从概念上讲,互斥锁有两种状态:锁定和解锁。它是否由0或1表示在这里并不重要 如果解锁(即发信号)互斥锁,它会将其状态从锁定更改为解锁。进一步解锁不会改变其状态,实际上也不会做任何事情 如果一个互斥锁被解锁,并且您调用wait,
2.当互斥量等于0时,我们执行wait(),线程被阻塞,互斥量保持为0。对的一段时间后,另一个线程执行signal()操作,然后释放阻塞。现在互斥锁的值是多少?0还是1 所以从概念上讲,互斥锁有两种状态:锁定和解锁。它是否由0或1表示在这里并不重要 如果解锁(即发信号)互斥锁,它会将其状态从锁定更改为解锁。进一步解锁不会改变其状态,实际上也不会做任何事情 如果一个互斥锁被解锁,并且您调用wait,那么该调用什么也不做(它不等待),线程继续执行 当一个互斥锁被锁定并调用wait时,线程被阻塞。当其他线程调用unlock时,阻塞被释放,互斥锁被解锁
最重要的是解锁和锁定操作是原子的,因为并行调用不能相互重叠以产生损坏的结果(形式上:对锁定/解锁的并行调用总是相当于一些序列化的调用历史)。否则,互斥的整个概念都将是愚蠢的。:) 所以从概念上讲,互斥锁有两种状态:锁定和解锁。它是否由0或1表示在这里并不重要 如果解锁(即发信号)互斥锁,它会将其状态从锁定更改为解锁。进一步解锁不会改变其状态,实际上也不会做任何事情 如果一个互斥锁被解锁,并且您调用wait,那么该调用什么也不做(它不等待),线程继续执行 当一个互斥锁被锁定并调用wait时,线程被阻塞。当其他线程调用unlock时,阻塞被释放,互斥锁被解锁
最重要的是解锁和锁定操作是原子的,因为并行调用不能相互重叠以产生损坏的结果(形式上:对锁定/解锁的并行调用总是相当于一些序列化的调用历史)。否则,互斥的整个概念都将是愚蠢的。:) 在阅读了这些评论(以及未经编辑的原始问题)之后,很明显,有足够多的人相信二进制符号可以与互斥体互换。如果我们用实际的术语(即,
pthread mutex
和systemvsemaphore
),它们是非常不同的。我将在下面概述最重要的区别
在阅读了这些评论(以及原始的未经编辑的问题)之后,很明显有足够多的人相信二进制符号可以与互斥体互换。如果我们用实际的术语(即,
pthread mutex
和systemvsemaphore
),它们是非常不同的。我将在下面概述最重要的区别
你为什么不读你的课本或者做谷歌搜索呢?互斥上的“信号”是什么?另外,互斥量不是0或1,而是锁定或解锁的。Pthread互斥量没有1或0值,但可以锁定或解锁。读一本好书。