【发布时间】:2012-10-03 05:45:52
【问题描述】:
假设我有一个互斥锁被锁定。有无限数量的其他线程等待锁定互斥锁。当我解锁互斥锁时,将选择其中一个线程进入临界区。但是我无法控制哪一个。如果我想让特定线程进入临界区怎么办?
我很确定这不能使用 POSIX 互斥锁来完成,但是,我可以使用不同的同步对象来模拟这种行为吗?
【问题讨论】:
-
您将获得的唯一保证是某些机制的公平性,但它们都没有您需要的功能。你不能重新设计你的算法不依赖于哪个线程先通过吗?也许如果你解释一下你在做什么,我们可以想到一些事情。
-
这是防止死锁的方法:我在一个临界区,我即将锁定另一个临界区。但是,我知道有另一个线程锁定了后一个 CS,并试图锁定前一个 CS。为了防止死锁,我需要通知其他线程应该取消其锁定前 CS 的尝试。
-
每个线程不能按相同的顺序获取所有的锁吗?这样就不会出现死锁问题。
-
不,不能。顺便说一句,请在下面查看一个可行的 - 虽然不是很有效 - 解决方案。
标签: multithreading mutex critical-section