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

看板C_and_CPP (C/C++)作者 (D.K.)時間2年前 (2022/03/15 13:11), 編輯推噓2(2020)
留言22則, 6人參與, 2年前最新討論串1/1
問題(Question): 為什麼在一個 thread 裡把資料 push 進去,同一個 thread 還能拿的出資料, 但用另一個 thread 去拿就會拿不到資料呢? 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) https://ideone.com/zxlJa7 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.228.154.118 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1647321106.A.188.html

03/15 13:42, 2年前 , 1F
置底13戒-5 應該是吧XD
03/15 13:42, 1F

03/15 15:06, 2年前 , 2F
好像是這樣…我來試試,感謝
03/15 15:06, 2F

03/15 15:13, 2年前 , 3F
對就是一樓說的那樣
03/15 15:13, 3F

03/15 15:30, 2年前 , 4F
何不用std::string就好了?還有language mode設C++17以
03/15 15:30, 4F

03/15 15:30, 2年前 , 5F
上你的data會和std::data相撞
03/15 15:30, 5F

03/15 15:54, 2年前 , 6F

03/15 16:41, 2年前 , 7F
哇,這程式碼好帥…之所以不用 string 是因為我後面要寫
03/15 16:41, 7F

03/15 16:42, 2年前 , 8F
socket, 所以會用到 byte 的 bitset...
03/15 16:42, 8F

03/15 23:25, 2年前 , 9F
queue不是thread-safe的
03/15 23:25, 9F

03/16 03:21, 2年前 , 10F
你這問題應該跟thread沒關係 XD
03/16 03:21, 10F

03/16 03:22, 2年前 , 11F
不然你在outString印一下data.size()試試 肯定是1
03/16 03:22, 11F

03/16 03:23, 2年前 , 12F
你code的問題在於line 23那個str[10]不見了(local)
03/16 03:23, 12F

03/16 07:18, 2年前 , 13F
要c-style string可以再呼叫std::string::c_str可以跟
03/16 07:18, 13F

03/16 07:18, 2年前 , 14F
傳統C API對接,或是用string_view這種non-owning view
03/16 07:18, 14F

03/16 07:18, 2年前 , 15F
做操作,小弟一些淺見不知道這能不能符合你的需求。用s
03/16 07:18, 15F

03/16 07:18, 2年前 , 16F
td::string好在它會取得那塊記憶體的ownership,不用自
03/16 07:18, 16F

03/16 07:18, 2年前 , 17F
己管理。
03/16 07:18, 17F

03/16 10:00, 2年前 , 18F
嗯,跟thread沒關係,我試著直接call function 也是一樣
03/16 10:00, 18F

03/16 10:01, 2年前 , 19F
改用string的話,socket 用 char[] 接資料轉存string
03/16 10:01, 19F

03/16 10:01, 2年前 , 20F
另一個thread 可以拿出string, 但再用c_str 轉回 char
03/16 10:01, 20F

03/16 10:01, 2年前 , 21F
資料就不是原本的樣子了~
03/16 10:01, 21F

03/16 16:10, 2年前 , 22F
今天的問題是和 thread 無關,但你這樣寫遲早踩到地雷
03/16 16:10, 22F
文章代碼(AID): #1YC20I68 (C_and_CPP)
文章代碼(AID): #1YC20I68 (C_and_CPP)