【发布时间】:2010-06-23 15:15:53
【问题描述】:
当线程 1 已经获得了互斥对象的锁,如果线程 2 试图获得同一个互斥对象的锁,线程 2 将被阻塞。 这是我的问题: 1、thread2怎么知道互斥对象被解锁了? 2. thread2 会在预定的时间间隔内尝试获取锁吗?
【问题讨论】:
标签: multithreading
当线程 1 已经获得了互斥对象的锁,如果线程 2 试图获得同一个互斥对象的锁,线程 2 将被阻塞。 这是我的问题: 1、thread2怎么知道互斥对象被解锁了? 2. thread2 会在预定的时间间隔内尝试获取锁吗?
【问题讨论】:
标签: multithreading
我感觉对互斥锁的工作方式存在误解。当线程 2 尝试获取线程 1 已经拥有的互斥锁时,尝试获取互斥锁的调用将不会返回 直到互斥锁可用(除非您使用 trylock() 变体超时)。
所以线程 2 不需要在那里循环并继续尝试获取互斥锁(除非您使用超时,因此您可以根据取消条件等其他条件中止尝试获取互斥锁)。
【讨论】:
这确实取决于操作系统,但通常会发生线程 2 被挂起并放入互斥锁维护的等待列表中。当互斥锁变得可用时,互斥锁的等待列表中的一个线程将从列表中删除并放回活动线程列表中。然后操作系统可以像往常一样安排它。在获取互斥体之前,thread2 是完全静止的。
【讨论】: