[問題] -解決- cout影響socket的send()??

看板C_and_CPP作者 (Willy)時間7年前 (2016/10/12 17:12), 7年前編輯推噓0(006)
留言6則, 3人參與, 最新討論串1/1
開發平台(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
咦,跑 daemon 沒有讓它自行 detach 嗎?
10/12 17:42, 2F

10/12 17:48, , 3F
有時候這類問題真的超難抓...
10/12 17:48, 3F

10/12 17:49, , 4F
哈,說來蠢,子thread設計執行完就回收,我剛在測試如
10/12 17:49, 4F

10/12 17:49, , 5F
果使用者忘記回收,會發生甚麼事,但一時間沉迷於
10/12 17:49, 5F

10/12 17:50, , 6F
cout怎麼會send這個狀況
10/12 17:50, 6F
文章代碼(AID): #1N_VwLDz (C_and_CPP)