看板 C_and_CPP 關於我們 聯絡資訊
請問各位先進, 在linux環境single thread的程式架構下使用settimer()是否需要注意 mutex相關問題? 為了能更清楚解釋我的問題, 我舉下列情境: 1. 一支single thread程式, 在main裡有無限迴圈作一些工作(如socket收封包然後 作處理) 2. 程式有一個global var: int n = 0; 3. 在main()的一開始使用linux api setimer()註冊timer, 預計5秒後timeout 4. timeout的callback function和main()的迴圈裡都可能對n作操作 老實講我從來都沒聽過single task需要注意critical section的問題, 但難道沒有可能發生以下狀況嗎? 1.在main()裡程式正對n進行運算(e.g. n++) 2.timeout發生, SIGALRM被發送至process, 導致callback function被觸發 3.callback中同樣對n作運算, 但因原本在main()中的"n++"尚未完成(instruction沒有 全部作完)就被SIGALRM trigger到callback function, 最後n的值錯誤 我會有這個問題, 應該是因為我對signal機制的原理不夠了解, 煩請各位先進 替我解惑一下, 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.101.23 hn12303158:轉錄至看板 Programming 03/13 17:54