作者Shuhaur (D.K.)
看板C_and_CPP
标题[问题] 请教一个 thread 和 queue 的问题
时间Tue Mar 15 13:11:42 2022
问题(Question):
为什麽在一个 thread 里把资料 push 进去,同一个 thread 还能拿的出资料,
但用另一个 thread 去拿就会拿不到资料呢?
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://ideone.com/zxlJa7
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.228.154.118 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1647321106.A.188.html
1F:→ ctrlbreak: 置底13戒-5 应该是吧XD 03/15 13:42
2F:→ Shuhaur: 好像是这样…我来试试,感谢 03/15 15:06
3F:→ Schottky: 对就是一楼说的那样 03/15 15:13
4F:推 Dracarys: 何不用std::string就好了?还有language mode设C++17以 03/15 15:30
5F:→ Dracarys: 上你的data会和std::data相撞 03/15 15:30
7F:→ Shuhaur: 哇,这程式码好帅…之所以不用 string 是因为我後面要写 03/15 16:41
8F:→ Shuhaur: socket, 所以会用到 byte 的 bitset... 03/15 16:42
9F:→ MasterChang: queue不是thread-safe的 03/15 23:25
10F:→ peter98: 你这问题应该跟thread没关系 XD 03/16 03:21
11F:→ peter98: 不然你在outString印一下data.size()试试 肯定是1 03/16 03:22
12F:→ peter98: 你code的问题在於line 23那个str[10]不见了(local) 03/16 03:23
13F:→ Dracarys: 要c-style string可以再呼叫std::string::c_str可以跟 03/16 07:18
14F:→ Dracarys: 传统C API对接,或是用string_view这种non-owning view 03/16 07:18
15F:→ Dracarys: 做操作,小弟一些浅见不知道这能不能符合你的需求。用s 03/16 07:18
16F:→ Dracarys: td::string好在它会取得那块记忆体的ownership,不用自 03/16 07:18
17F:→ Dracarys: 己管理。 03/16 07:18
18F:→ Shuhaur: 嗯,跟thread没关系,我试着直接call function 也是一样 03/16 10:00
19F:→ Shuhaur: 改用string的话,socket 用 char[] 接资料转存string 03/16 10:01
20F:→ Shuhaur: 另一个thread 可以拿出string, 但再用c_str 转回 char 03/16 10:01
21F:→ Shuhaur: 资料就不是原本的样子了~ 03/16 10:01
22F:推 Schottky: 今天的问题是和 thread 无关,但你这样写迟早踩到地雷 03/16 16:10
23F:→ tomsawyer: data那个不是全域变数吗?跟第五戒有关? 03/20 04:57
24F:→ peter98: 是23行有问题 不是那个data有问题..................... 03/20 08:06
25F:推 dreamroad: local变数的记忆体指标离开scope之外无效,你要克服的 04/01 21:33
26F:→ dreamroad: 是记忆体管理的议题。 04/01 21:33