簡體   English   中英

C pthread加入一個已結束的線程

[英]C pthread join an ended thread

我正在構建通過FIFO進行通信的2個程序(客戶端/服務器)。 兩個程序都有線程。 當客戶端的線程結束時,它不會加入,並且主要掛起。

該計划執行以下操作:

服務器:

  1. main:從FIFO1讀取
  2. main:創建處理請求的線程。
  3. 主要:轉到1
  4. 線程:處理請求
  5. thread:向FIFO2發送響應
  6. 線程:退出

客戶:

  1. main:產生線程
  2. thread:從FIFO2讀取客戶端的X響應
  3. 線程:退出
  4. main:向FIFO1發送X請求
  5. main:等待線程退出
  6. 主要:檢查回復

服務器運行良好,所有線程都相應地連接。

客戶端在步驟5中失敗。使用

pthread_join(&reader,NULL);

永遠掛起主力。 我已經檢查過,線程已經結束了。

運用

pthread_tryjoin_np(&reader,NULL);

我明白了

錯誤碼= 16

strerror給出了

設備或資源繁忙

創建線程:

pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
pthread_create(&reader,&attr,trataResp,NULL);

或者使用:pthread_create(&reader,NULL,trataResp,NULL);

不會產生任何變化。

我該如何解決這個問題?

那么pthread_join接收線程id,而不是它的地址。 這一行:

pthread_join(&reader,NULL);

應該:

pthread_join(reader,NULL);

如果reader被聲明為pthread_t

希望這不僅僅是你問題中的拼寫錯誤,這實際上有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM