我的iOS應用程序需要將數據從圖形線程發送到音頻線程。需要存儲這些數據包(表示要合成的聲音),直到音頻線程準備好對其執行操作爲止。顯而易見的數據結構是一個隊列,其中圖形線程推到頭部,音頻線程從尾部拉出。音頻線程正在實時運行,並且任何鎖都可能導致可聽到的故障。有沒有一個線程安全的方式來做到這一點沒有鎖?Objective-C中的無鎖消息隊列
我已經嘗試performSelector:onThread:withObject:waitUntilDone沒有運氣。我認爲這是因爲音頻線程沒有相關的運行循環。
在我看來,我可以在這裏構建一些類似於基於數組的環形緩衝區,它可以存放指向我的消息的指針,其中生產者線程負責移動寫入頭,並且消費者線程將處於移動讀取頭的電荷。我怎樣才能確保這樣的事情實際上是線程安全的? The wikipedia on non-blocking algorithms提到無鎖環形緩衝區可以在不使用低級(彙編)代碼的情況下實現,但是我對自己對線程如何共享機器控制權的瞭解還不夠自信,以確保我實現的實際上是線程-安全。
我會試試這個。你可以設置NSOperationQueue的併發性爲1,爲你有效地創建一個串行隊列。 – 2011-03-27 07:04:07