2010-06-23 40 views
0

当一个线程1已经获取了互斥锁对象时,如果线程2试图获取对同一个互斥对象的锁,则线程2将被阻塞。 这里是我的问题: 1. thread2如何知道互斥对象被解锁? 2.将线程2尝试获取锁定在预先设定的时间间隔?有关pthread_mutex_lock的一些问题

回答

0

这实际上是与操作系统有关的,但通常情况是thread2被暂停并放在由互斥锁维护的等待列表中。当互斥体变为可用时,互斥体等待列表上的线程将从列表中移除并放回到活动线程列表中。操作系统可以像往常一样安排它。 thread2完全静止,直到它可以获取互斥量。

+0

@all 谢谢你们 – lakshman 2010-06-24 05:41:12

1

我感觉到对互斥体如何工作的误解。当线程2尝试获取已由线程1拥有的互斥体时,尝试接受互斥体的调用不会返回,直到互斥体变为可用(除非您的trylock()变体有超时)。

因此,线程2不需要在那里循环,并继续尝试采取互斥体(除非您使用超时,因此您可以基于其他条件取消互斥体,如取消条件)。

+0

我的解释是OP在询问有关互斥体本身的实现。 – mschaef 2010-06-23 15:26:21

+1

@mschaef:很可能你是对的。根据问题的措辞很难说OP的理解水平。 – 2010-06-23 15:37:40