關於多線程運行不正確的問題——給自己的備忘錄

終止一個線程最好是讓函數自己return,注意返回前最好將其他變量重置回初始狀態。

暫停或者判斷程序的執行狀態同樣的最好自己設bool值,最好不要用系統的給定的函數,因爲只有你自己才知道線程在什麼地方暫停纔是最好的。

在《操作系統原理》這門課程中就有講解操作系統也是通過類似的機制來解決進程同步問題的。



最後,鄭重提示:以上方法對於多核cpu 上的程序同步問題是沒有用的!

對與多核cpu 上的程序同步問題,最好不要用信號量,互斥量,事件對象,因爲它們都屬於內核對象,都是對一個cpu而言的。其他的cpu根本不會理睬你設置的這些東西。另外在一個cpu裏等待線程函數的返回,對cpu2沒有任何作用。 

單核的cpu在處理多線程時每次只能執行一跳指令,也就是說無論你的程序有多少個線程,每一時刻執行的也只是一個線程裏的代碼,cpu會輪流給每個線程分配時間片,時間片分配到哪個線程頭上,哪個線程裏的代碼就執行。但是多核cpu就不一樣了,他可以同時執行多個線程裏的代碼,這纔是真正的“多線程”。所以一段程序,在單核的電腦上跑沒有問題的,但是在多核cpu的電腦上出現的結果就會有很大的隨機性。 

多核cpu 上的程序同步問題的解決方案參見:http://hi.baidu.com/jiangyangw3r/item/5ff4918fa59ff1c8b071544c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章