所以我遇到了一個競爭條件,我有幾個解決方案來解決這個問題。我很清楚線程是新手,我的意見和研究是有限的。如果用戶從服務器接收到某些消息,可能會發生大量的異步調用。因此,由於我的物體的依賴性,我的設計很差。同步依賴的異步函數目標C
可以說我有一個名爲
adduser:(NSString s){
does some asynchronize activity
}
Messageuser:(NSString s)
{
Does some more asychronize activity
}
功能,如果用戶要收到一條消息,告訴它要ADDUSER「瑞恩」。他會創建一個線程並繼續查找Ryan並存儲他。但是,如果用戶使應用程序處於掛起模式,並且在等待接收的消息緩衝中存在addUser請求和MessageUser請求,則會出現競爭條件,因爲完成Adduser所需的時間比完成MessageUser所需的時間更長。因此,如果調用messageUser,並且(在我們的示例中)「Ryan」尚未完全添加,則會引發錯誤。
這個問題有什麼可能的解決方案。我研究了鎖和信號燈,我試圖做的是,當MessageUser接收到一個調用時,檢查以確保當前沒有線程正在執行addUser。如果沒有,繼續。否則等待,而不是在完成後繼續。