請問各位先進, 在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