[問題] 請教一個 thread 和 queue 的問題

作者: Shuhaur (D.K.)   2022-03-15 13:11:42
問題(Question):
為什麼在一個 thread 裡把資料 push 進去,同一個 thread 還能拿的出資料,
但用另一個 thread 去拿就會拿不到資料呢?
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://ideone.com/zxlJa7
作者: ctrlbreak   2022-03-15 13:42:00
置底13戒-5 應該是吧XD
作者: Shuhaur (D.K.)   2022-03-15 15:06:00
好像是這樣…我來試試,感謝
作者: Schottky (順風相送)   2022-03-15 15:13:00
對就是一樓說的那樣
作者: Dracarys (MayShowGunMore)   2022-03-15 15:30:00
何不用std::string就好了?還有language mode設C++17以上你的data會和std::data相撞https://godbolt.org/z/4jGrT4jTd
作者: Shuhaur (D.K.)   2022-03-15 16:41:00
哇,這程式碼好帥…之所以不用 string 是因為我後面要寫socket, 所以會用到 byte 的 bitset...
作者: MasterChang (我愛ASM)   2022-03-15 23:25:00
queue不是thread-safe的
作者: peter98 (新兵)   2022-03-16 03:21:00
你這問題應該跟thread沒關係 XD不然你在outString印一下data.size()試試 肯定是1你code的問題在於line 23那個str[10]不見了(local)
作者: Dracarys (MayShowGunMore)   2022-03-16 07:18:00
要c-style string可以再呼叫std::string::c_str可以跟傳統C API對接,或是用string_view這種non-owning view做操作,小弟一些淺見不知道這能不能符合你的需求。用std::string好在它會取得那塊記憶體的ownership,不用自己管理。
作者: Shuhaur (D.K.)   2022-03-16 10:00:00
嗯,跟thread沒關係,我試著直接call function 也是一樣改用string的話,socket 用 char[] 接資料轉存string另一個thread 可以拿出string, 但再用c_str 轉回 char資料就不是原本的樣子了~
作者: Schottky (順風相送)   2022-03-16 16:10:00
今天的問題是和 thread 無關,但你這樣寫遲早踩到地雷
作者: tomsawyer (安安)   2022-03-20 04:57:00
data那個不是全域變數嗎?跟第五戒有關?
作者: peter98 (新兵)   2022-03-20 08:06:00
是23行有問題 不是那個data有問題.....................
作者: dreamroad (...)   2022-04-01 21:33:00
local變數的記憶體指標離開scope之外無效,你要克服的是記憶體管理的議題。

Links booklink

Contact Us: admin [ a t ] ucptt.com