這是我遇到的一個面試問題,我不知道如何回答。實現互斥確保有界等待
首先什麼是一個有界的等待互斥體,你能給我一些互斥體的例子來確保有限的等待並且不能確保有界的等待嗎?
其次,我不知道如何實現它,因爲它似乎互斥是操作系統的內置功能。
你會如何回答這個面試問題?我可以用什麼樣的原子操作來實現互斥體,以及如何實現?
這是我遇到的一個面試問題,我不知道如何回答。實現互斥確保有界等待
首先什麼是一個有界的等待互斥體,你能給我一些互斥體的例子來確保有限的等待並且不能確保有界的等待嗎?
其次,我不知道如何實現它,因爲它似乎互斥是操作系統的內置功能。
你會如何回答這個面試問題?我可以用什麼樣的原子操作來實現互斥體,以及如何實現?
你當然可以在你的操作系統永遠不會超時的互斥量上實現超時的互斥量。使用操作系統提供的互斥鎖來管理對自己計數器的訪問,保證始終快速釋放它。
重複
...在櫃檯
獲得OS互斥鎖...檢查計數器,看看> 0
......如果大於0,遞減,發佈OS互斥體,回報超時互斥已經獲取了櫃檯
...發佈OS互斥鎖...檢查是否超時
......如果超時,返回超時互斥超時
...睡一段時間
結束重複
當然,POSIX互斥鎖有一個trylock函數,它使得等待循環變得微不足道。
忙碌等待當然是浪費CPU的能力。例如,更有效的實現是可能的,POSIX具有條件變量。
似乎有兩種「有限等待」的用法。 One usage seems to be a simple time-based meaning:
任何特定進程進入其關鍵部分的等待時間都有限制。
Another usage seems to be a thread-count meaning:
請求進入臨界段應該只需要等待其他進程進入和離開臨界區的有限數量的一種方法。
不幸的是,我不知道如何真正回答這個問題。它似乎依賴於OS原語。也許他們正在尋找類似Peterson's solution的東西。