→ loveme00835: 或者你應該思考的是: 為什麼多個執行緒都可以去更改 04/27 23:43
→ loveme00835: 同個物件的狀態, 而不是讓單個專責的執行緒來做呢? 04/27 23:43
→ loveme00835: 可以參考看看 active object pattern 把兩者先鬆綁 04/27 23:43
→ icetofux: 我的程式由9個thread構成,8個各自跑不同的流程,透過so 04/28 07:45
→ icetofux: cket與不同設備通訊,1個負責GUI,把8個設備的細部資料 04/28 07:45
→ icetofux: 顯示出來,每個設備約有60多種的細部資料。文中所提在th 04/28 07:45
→ icetofux: read間共用的變數就是設備傳輸至GUI的細部資料。 04/28 07:45
→ icetofux: 謝謝loveme00835,我剛剛google了active object pattern 04/28 09:01
→ icetofux: ,好像就是用來避免大量mutex的設計模式,雖然沒把握馬 04/28 09:01
→ icetofux: 上帶入應用,但是一個可以努力的方向。 04/28 09:01
推 eye5002003: 這情況不是用std::atomic比較適合嗎? 04/28 09:47
以我對atomic的認識,似乎只有幾種基本型態有提供atomic,我不是很確定像是string或是vector能不能使用。
→ Lipraxde: 一般不是保護 critical section 嗎?每個變數都給一個 04/28 11:56
→ Lipraxde: mute lock 好像比較少看到 04/28 11:56
→ Lipraxde: mute -> mutex 04/28 11:56
→ kobe8112: 如果改成各設備更新的資料丟到各自的queue中,UI更新的 04/28 11:59
→ kobe8112: Thread輪詢各queue是否有資料需更新呢? 04/28 12:00
※ 編輯: icetofux (111.71.40.212 臺灣), 04/28/2020 12:52:59
→ sarafciel: 應該很容易看出問題才是 04/28 13:54
推 steak5566: 可以請樓上大大可以解說一下為什麼嗎 04/28 22:55
→ Caesar08: sarafciel的strt_flag型態要改成atomic<bool> 04/29 13:37
→ Caesar08: 另外,func與func2不相等,func保護的是整段過程 04/29 13:38
→ Caesar08: func2只保護每次sv_int的read write 04/29 13:38
→ Caesar08: 結果不一樣是正常的 04/29 13:38
→ Caesar08: 你的Get直接return data_cpy就好,不用先create再copy 04/29 13:40
→ Caesar08: 另外有支援C++ 17的話,用shared_mutex會比mutex好 04/29 13:41
推 steve1012: 不是有鎖住就好 還要看你想保護的東西是什麼 比如說你 04/29 14:04
→ steve1012: 各個function 之間有沒有什麼順序先後需要保證的 04/29 14:04
→ steve1012: muli threading 寫的越簡單通常越好 容易看出有沒有問 04/29 14:04
→ steve1012: 題 04/29 14:04
推 ucrxzero: 嗯嗯 04/30 18:11