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

看板LinuxDev作者 (真.粽子無雙)時間12年前 (2012/12/18 13:21), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串6/6 (看更多)
※ 引述《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 我不熟,不好意思不能給你什麼建議,對不起. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.30.15

12/19 00:46, , 1F
真是大師...完全是我沒想到的方向 十分感謝
12/19 00:46, 1F

12/19 01:50, , 2F
真正的大師是jserv,唐鳳那一類的,我只是在ptt嘴砲的
12/19 01:50, 2F
文章代碼(AID): #1Gp_rgHi (LinuxDev)
文章代碼(AID): #1Gp_rgHi (LinuxDev)