我想出了這個被要求用C++編寫代碼的問題。所以,我需要使用C++同步原語。多線程調用相同的函數
問:創建一個接受整數作爲參數並在控制檯上打印的方法(例如foo)。此方法由多個線程訪問。如果兩個或多個線程使用相同的值調用該方法,則只有一個線程應該允許打印其他線程應該等待的值。如果值不同,則所有線程都應允許打印該值。
我的建議是使用全局哈希表讓我們說,unordered_map(我,信號量)地圖。所以,當foo(i)被調用時,foo會檢查散列表。如果我不在散列表中,我們添加map [i] = semaphore(0)。當我打印時,調用map [i] .release()以允許輸入的其他等待線程繼續它們的打印操作。另一方面,如果我已經在哈希中,這意味着具有相同輸入的其他線程正在運行,所以它應該通過map [i] .aquire()等待。
希望你能幫我找到一個更好的解決方案或這個建議的更正版本。
您的解決方案有什麼問題? – nosid
@nosid我相信使用全局散列表不是一個強大的方法,所以應該有更好的解決方案。 – Nazgol
控制檯輸出是否已經同步?如果沒有,你也必須處理。回到原來的問題,該方法只需要跟蹤最近的值輸出,其他線程不會等待(除非訪問/更新最近值輸出時的互斥體或信號量),它們的如果與最後一個值輸出相匹配,輸出請求將被忽略。 – rcgldr