2014-03-03 80 views
0

假設我們有一個使用郵箱的消息傳遞系統。當發送到一個完整的郵箱或試圖從一個空郵箱接收時,一個進程不會阻塞,而是會得到一個錯誤代碼。該過程通過反覆嘗試,一次又一次地響應錯誤代碼,直到成功。這是否會導致競爭狀態?這種情況會導致競爭狀態嗎?

+0

無延遲循環,等待發生某些事件(例如郵箱中存在郵件),稱爲「繁忙等待」。這不是一種競爭條件,但它仍然是不受歡迎的。 – Buhb

回答

0

首先,我推薦檢查一下race condition的含義。

如果郵箱系統在接收/檢索電子郵件時處理「原子性」,則沒有競爭條件。您的應用可能會一直循環嘗試檢索郵件,但這不是競爭條件。

現在,我們假設郵箱系統不使用任何類型的鎖定機制。如果同時嘗試閱讀是否存在新消息,則會有新消息到達該郵箱,您可能會讀取未完成的消息,因爲該消息仍然到達。

在最好的情況下你未完成的消息,但通常發生崩潰,因爲無效指針等

0

您描述本身並不會導致一場比賽的情況下,雖然你採取的行動對錯誤的響應可以例如將「檢測到該郵箱是空的」消息推送到空郵箱。從兩個線程做到這一點,你可以很容易地收到兩封郵件。

相關問題