gpt4 book ai didi

multithreading - 如何将互斥锁的所有权授予特定线程?

转载 作者:行者123 更新时间:2023-12-03 12:52:40 25 4
gpt4 key购买 nike

想象一下,我锁定了一个互斥锁。等待锁定互斥锁的其他线程数量不受限制。当我解锁互斥锁时,将选择其中一个线程进入临界区。但是,我无法控制哪一个。如果我想让特定线程进入临界区怎么办?

我很确定这不能使用 POSIX 互斥锁来完成,但是,我可以使用不同的同步对象来模拟行为吗?

最佳答案

您可以使用互斥锁、条件变量和线程 id 来实现。

在解锁互斥锁之前,线程设置目标线程 id,广播条件变量并释放互斥锁。等待线程唤醒,锁定互斥锁并检查目标线程 id 是否等于该线程 id。如果不是,则线程返回等待。

为了避免唤醒所有等待线程只是为了检查目标线程 id 然后返回等待,此方法的优化是为每个等待线程使用单独的条件变量。这样,信号线程将通知特定目标线程的条件变量。

另一种选择是使用发送到特定线程的信号。假设我们使用 SIGRTMIN以此目的。首先,所有线程在开始时都会阻塞此信号,以便该信号变为挂起状态并且不会在线程未等待它时丢失。当线程想要锁定互斥锁时,它首先调用 sigwait()以原子方式解除阻塞 SIGRTMIN并等待它或交付一个已经挂起的。一旦线程收到信号,它就可以继续并锁定互斥锁。信号线程使用 pthread_kill(target_thread_id, SIGRTMIN)唤醒特定线程。

关于multithreading - 如何将互斥锁的所有权授予特定线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12702521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com