关于 pthread_mutex_lock 的一些问题

Posted

技术标签:

【中文标题】关于 pthread_mutex_lock 的一些问题【英文标题】:some questions regarding pthread_mutex_lock 【发布时间】:2010-06-23 15:15:53 【问题描述】:

当线程 1 已经获得了互斥对象的锁,如果线程 2 试图获得同一个互斥对象的锁,线程 2 将被阻塞。 这是我的问题: 1、thread2怎么知道互斥对象被解锁了? 2. thread2 会在预定的时间间隔内尝试获取锁吗?

【问题讨论】:

【参考方案1】:

我感觉对互斥锁的工作方式存在误解。当线程 2 尝试获取线程 1 已经拥有的互斥锁时,尝试获取互斥锁的调用将不会返回 直到互斥锁可用(除非您使用 trylock() 变体超时)。

所以线程 2 不需要在那里循环并继续尝试获取互斥锁(除非您使用超时,因此您可以根据取消条件等其他条件中止尝试获取互斥锁)。

【讨论】:

我的解释是 OP 询问的是互斥锁本身的实现。 @mschaef:很可能你是对的。根据问题的措辞很难判断 OP 的理解程度。【参考方案2】:

这确实取决于操作系统,但通常会发生线程 2 被挂起并放入互斥锁维护的等待列表中。当互斥锁变得可用时,互斥锁的等待列表中的一个线程将从列表中删除并放回活动线程列表中。然后操作系统可以像往常一样安排它。在获取互斥体之前,thread2 是完全静止的。

【讨论】:

以上是关于关于 pthread_mutex_lock 的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

pthread_mutex_lock

pthread_join 和 pthread_mutex_lock 有啥区别?

pthread_mutex_lock源码分析

pthread_mutex_lock()pthread_mutex_unlock()

pthread_mutex_lock 导致死锁

pthread_mutex_lock/unlock