[问题] 请教一个 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