1
從假設沒有辦法自動增加計數器並鎖定一個互斥量(或ty獲取它)開始,是否有任何多線程庫允許讀取等待線程數一個互斥體?獲取等待聯鎖的線程數
從假設沒有辦法自動增加計數器並鎖定一個互斥量(或ty獲取它)開始,是否有任何多線程庫允許讀取等待線程數一個互斥體?獲取等待聯鎖的線程數
我不知道哪種編程語言,你的編碼,但在C#中,而不會阻塞的對象上可以try to get an exclusive lock,所以你的互斥實現應該是這樣的:
class MyMutex
{
public int LockedThreadsCount
{
get { lock (countLock) { return waitingThreads; } }
}
public void WaitOne()
{
if (!Monitor.TryEnter(mainLock))
{
lock (countLock) { waitingThreads++; }
Monitor.Enter(mainLock);
lock (countLock) { waitingThreads--; }
}
}
public void Release()
{
Monitor.Exit(mainLock);
}
private int waitingThreads = 0;
private object countLock = new object();
private object mainLock = new object();
}
線程等待數一個互斥體通常並不需要知道,因爲不管這個函數返回什麼值,在你對這些信息採取行動的時候它可能是錯誤的/過時的(例如,一個新的線程可能會立即嘗試獲取互斥體你稱之爲函數)。也就是說,一些靜音有一個try_lock()方法,如果它沒有被鎖定,它將鎖定互斥體,否則失敗......這會告訴你互斥體是否被鎖定。 –
@JeremyFriesner這是一種更好的好奇心。我認爲,如果互斥體實際上是一種條件,並且主管線程想知道是否有任何其他線程對這種情況感興趣,它可能會有所幫助。 –
它不叫「庫」,它是「調試器」。唯一可以依賴的軟件凍結所有正在運行的線程,所以結果在納秒內實際上是有意義的並且毫無用處。 –