Re: [問題] 關於多process執行順序 (QT)

作者: leolarrel (真.粽子無雙)   2012-12-18 13:21:43
※ 引述《cty222 (縱裕)》之銘言:
: ※ 引述《leolarrel (真.粽子無雙)》之銘言:
: 2. while(*share!=1){ | while(*share!=2){
: : 痾
: : 你的C code 虛擬碼,*share 初始值是0 ,接下來你的while判斷*share 要等於1才會執行
: : printf.可是,你說C code 那邊會一直印 0 , 這.....
: 對...我打錯了
: : 所以,依字面上的了解,你會有一塊共享記憶體,不只一個程式會同時寫入這個記憶體,
: : 這樣理解對嗎?
: 對的
: : 如果對,你最後還是不能使用虛擬碼所表示的方式來進行同步化作業,會死得很難看的
: : 同步化作業,要使用 信號機/mutx/鎖 這幾樣技術才是根本解決方法
: 感謝指點
: 所以應該要用mutx去鎖...
: 上了一課
大大你將虛擬碼改正後,我大概就能看得懂你的邏輯.
虛擬碼邏輯上應該沒錯,有時候我也會偷懶用這怪招,如果要找出真正的原因,我可能需
要實際trace code 才會知道為什麼.
看虛擬碼,用while loop等待法問題很多,不外乎cpu 會太忙拉,同步會不太準拉之類的
但,有一個更隱晦,更難以察覺的地方就是 Compiler 最佳化的問題.Compiler 最佳化
的魔手一但伸進你的程式,你就無法保證你的邏輯還照著"字面"的行為在行動.你遇到的
問題有可能一部分跟compiler 最佳化有關.這要實際build 出assemably code 進行檢
查才行
: 不過我還是不知道為何會出現我原本想問的問題
: 就*share=1一直寫不進去
: 只有讓他睡才行 是優先權的問題嗎?(感覺也不像...)
: 另外有個問題也想問
: 因為後來決定用QT 的Dbus function來寫
: 目前是 main process 發signal到 client process 已經建好了
: 如果我想要client 發signal到 main
: 是要再多建一個反向的bus連結嗎?
: (因為硬體中斷會打到client端 client做好中斷副程式後要跟main講它做了什麼...)
: ^^"
DBus 我不熟,不好意思不能給你什麼建議,對不起.
作者: cty222 (縱裕)   2012-02-19 00:46:00
真是大師...完全是我沒想到的方向 十分感謝
作者: leolarrel (真.粽子無雙)   2012-02-19 01:50:00
真正的大師是jserv,唐鳳那一類的,我只是在ptt嘴砲的

Links booklink

Contact Us: admin [ a t ] ucptt.com