2
A
回答
2
您是否需要了解實現關鍵部分和信號量原語的算法?請參閱Process Synchronization(pdf)。請注意,有時您可能會看到使用關鍵部分實現的信號量,以確保測試修改操作的原子性。
消息隊列建立在同步基元之上。您尋求的消息隊列在優秀的Little Book of Semaphores(pdf)的第4章中。
編輯補充:
我猜你的意思是什麼「的郵箱,」所以,如果這個答案是不行的,它會是有助於您定義郵箱是什麼。我瞭解練習是通過使用消息隊列等高級同步機制來實現P和V嗎?由於必須保護消息隊列免受併發問題的影響,這是一個簡單的練習。
鑑於這是保證線程安全類郵箱,並具有下列方法:
- 排隊(消息) - 添加消息到郵箱。如果有任何線程被阻塞,請喚醒一個線程。
- 出列 - 從郵箱中刪除郵件,如果郵箱爲空則阻塞。
然後信號燈類需要有這些方法:
any_message任何消息都沒有。不管它是什麼,因爲我們只使用消息隊列來喚醒阻塞的線程。
此算法模擬不能具有負值的信號量。一個可以用負值創建的信號量需要做更多的工作。你需要哪些?
相關問題
- 1. 如何在Android模擬器中傳遞數字和消息inbuild消息?
- 2. 如何模擬applicationWillResignActive消息?
- 3. 傳遞信息
- 4. 如何獲取模擬器的iOS內存消耗信息?
- 5. 如何在流星中傳遞我的信使和消息?
- 6. 傳遞模型信息的RenderPartial
- 7. 模塊之間的信號傳遞
- 8. 如何將附加信息傳遞給ActionMailer來處理傳入消息?
- 9. 如何在AUTO_ACKNOWLEDGE JMS會話場景中模擬消息重新傳遞?
- 10. FIX通信模型 - 消息傳遞或套接字
- 11. C#傳遞信息
- 12. 傳遞div信息
- 13. NServiceBus - 如何在消息信封中傳遞自定義標題?
- 14. Android消息傳遞
- 15. 如何實現單個消息的消息傳遞?
- 16. 消息爲Chrome擴展傳遞變量
- 17. 如何從多選JTree傳遞信息?
- 18. 如何通過jQuery傳遞信息
- 19. 如何測試Firebase消息傳遞refreshToken
- 20. 如何將消息傳遞給PLC
- 21. 如何創建消息傳遞服務?
- 22. (消息傳遞)隊列如何擴展?
- 23. 如何在codeigniter中傳遞消息?
- 24. 如何將消息傳遞給線程
- 25. Firebase消息傳遞錯誤:消息傳遞/權限被阻止
- 26. Cassandra的消息傳遞
- 27. 帶消息傳遞的IPC
- 28. 如何在訪問者模式中傳遞「位置」信息?
- 29. GLAccount信息 - 模擬BAPI_INCOMINGINVOICE_CREATE
- 30. 傳遞類信息C#
我對信號量的算法(等待和信號算法)有所瞭解。 我不知道如何模擬郵箱的信號隊列。 當我們在等待程序中說: semaphore.count--; 如果(semaphore.count <0) 地方這個過程中semaphore.queue並阻止此過程 ,當我們在siganl過程,說: semaphore.count ++; 如果從semaphore.queue和地方在準備列表(semaphore.count <= 0) 刪除進程p 現在應該怎麼辦,這些與郵箱? 哪裏必須放置進程? – Hero 2010-01-01 08:52:40
哈米德,我添加到答案。 – 2010-01-01 19:42:04
是的,一個負值的信號量(用於互斥)。 哪裏應該放置線程? (當我們向郵箱添加消息時,線程從哪裏喚醒?) 我們應該像Semaphore一樣考慮一個線程隊列嗎? – Hero 2010-01-02 14:57:00