[問題] -解決- cout影響socket的send()??
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1476263573.A.37D.html
→
10/12 17:25, , 1F
10/12 17:25, 1F
※ 編輯: hn12404988 (220.133.16.181), 10/12/2016 17:39:00
→
10/12 17:42, , 2F
10/12 17:42, 2F
→
10/12 17:48, , 3F
10/12 17:48, 3F
→
10/12 17:49, , 4F
10/12 17:49, 4F
→
10/12 17:49, , 5F
10/12 17:49, 5F
→
10/12 17:50, , 6F
10/12 17:50, 6F