2016-05-14 27 views
1

我目前在使用Poco線程進行波形數據加載,生成波形和計算節拍位置時遇到了麻煩。我的音頻線程與RTAudio用於流式傳輸數據的音頻線程不同,因此它的互斥鎖不會鎖定時間太長,因爲RTAudio(需要鎖定音頻互斥鎖)不能等待太久,否則會發生緩衝區欠載。 ..目前正在發生。即使節目空轉,它現在也開始發生了;沒有被要求加載任何東西。調試線程時printf的效果

我的想法是計時線程被阻塞多長時間以獲得互斥鎖以及它們被鎖定了多長時間以找出問題出在哪裏並將其打印到控制檯,因此這將是類似於6 printf的每一幀,目標幀速率爲每秒60幀。

我剛剛注意到,如果我停止打印到控制檯,當程序空閒時不會發生緩衝區溢出,它看起來像是我在一幀中使用printf這麼多次的問題。

我想知道這是如何發生,但更重要的是,如果我不能使用printf,我該如何監視線程​​時間?

回答

1

POSIX要求大多數標準I/O函數是線程安全的和原子的。這意味着在同一個數據流上運行的幾個*printf會互相阻塞。如果您不想鎖定,您應該檢查文檔以獲取特定於操作系統的非阻塞函數。

同類問題:stdout thread-safe in C on Linux?