作者hn12404988 (Willy)
看板C_and_CPP
标题[问题] cout影响socket的send()??
时间Wed Oct 12 17:12:51 2016
开发平台(Platform): CentOS 7
编译器: GCC std=c++11
额外使用到的函数库(Library Used):
sys/socket.h
poll.h
问题(Question):
很奇怪的状况,一段程式码中,会先send(),成功後会poll()来等
poll成功的话就recv()
很基本的使用,但只要我在send之前简单加上一行:
std::cout << "a" << std::endl;
(printf也一样)
就有可能「机率性」的,server就收不到send,也可说就是send不出去
但如果是在send之後,不管加上几行cout,都是正常
在想是不是底层的i/o有bug? 另外这是multi-thread的程式
这段程式是运行在子thread,但也看不出来cout跟multi-thread有甚麽关系?
请问有人遇过这种状况吗?
或认为可能的问题是出在哪吗?
------------------编辑-------------------------
刚刚就找到问题点了,有点蠢
因为我这个程式是一个on production时要24小时跑的
是这样设计的,但因为我现在再加新功能测试
我让他跑下去,就马上关掉看结果(int main主thread就死了)
子thread这时取不到需要的资料(因为部份变数宣告在外面)
子thread是一个[&]的lambda,所以是call by reference
导致,没加一行cout,子thread可以抢在母thread关闭前拿到资料
加上去,那微小的毫秒差,会让子thread拿到一片空白
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.16.181
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1476263573.A.37D.html
1F:→ firejox: 机率性..应该是同步的问题 10/12 17:25
※ 编辑: hn12404988 (220.133.16.181), 10/12/2016 17:39:00
2F:→ Schottky: 咦,跑 daemon 没有让它自行 detach 吗? 10/12 17:42
3F:→ Schottky: 有时候这类问题真的超难抓... 10/12 17:48
4F:→ hn12404988: 哈,说来蠢,子thread设计执行完就回收,我刚在测试如 10/12 17:49
5F:→ hn12404988: 果使用者忘记回收,会发生甚麽事,但一时间沉迷於 10/12 17:49
6F:→ hn12404988: cout怎麽会send这个状况 10/12 17:50