作者x246libra (宸火)
看板C_and_CPP
標題[問題] thread運作
時間Fri May 25 16:46:10 2018
開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc
問題(Question):
問題1.
func1在另外創造的thread執行
func2在main執行
不使用pthread_join等待
問題2.
如果想要將func2也丟到 與 func1同樣的thread應該怎麼做?
而且要func1執行完 才執行func2
預期的正確結果(Expected Output):
問題1.
func1 輸出 1~10
func2 輸出 a~j
預期輸出每次都會不太一樣
1~10 a~j 可能混合在一起 可能依序排列
但最後一個輸出 一定為 j
問題2.
想不到怎麼做
請教有什麼作法
錯誤結果(Wrong Output):
問題1.
最後一個輸出 不一定為j
func2一定可以執行完成
疑問是 func2 執行結束
main的thread應該也結束了
為什麼j都輸出了 func1還是會跑?
既然會跑 為什麼 不會輸出到10?
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://pastebin.com/ixYbTdjZ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.35.157
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1527237972.A.3F1.html
1F:→ elements: 看不懂問題一…問題二:在func1結尾的地方呼叫func2 05/25 16:51
問題2 算是我實際遇到的問題 只是將其簡化
限制 不能在func1的結尾 呼叫func2
有辦法解決問題2嗎?
※ 編輯: x246libra (61.220.35.157), 05/25/2018 16:57:40
2F:→ elements: 你沒有辦法把一個函數塞到thread裡面,除非叫他自己去 05/25 17:03
3F:→ elements: 抓。所以要不就是把func1和2一起包成三 不然就是做even 05/25 17:03
4F:→ elements: t queue,或簡單一點用個判斷式或function pointer 05/25 17:03
5F:→ elements: 第一個問題用個cond variable吧 05/25 17:08
6F:推 stupid0319: 把func2剪下貼上到thread的func1之後 05/26 00:41
7F:推 megawalker: 樓上正解XD 05/26 01:46