FIFOを介して通信する2つのプログラム(クライアント/サーバー)を構築しています。どちらのプログラムにもスレッドがあります。クライアントのスレッドが終了すると、スレッドは結合されず、メインがハングします。
プログラムは次のことを行います。
サーバ:
- main:FIFO1から読み取ります
- main:リクエストを処理するスレッドを作成します。
- メイン:goto 1
- スレッド:リクエストを処理します
- スレッド:FIFO2に応答を送信します
- スレッド:終了
クライアント:
- メイン:スポーンスレッド
- スレッド:FIFO2からクライアントへのX応答を読み取ります
- スレッド:終了
- main:XリクエストをFIFO1に送信します
- main:スレッドが終了するのを待つ
- メイン:応答を確認する
サーバーは正常に動作し、それに応じてすべてのスレッドが結合されます。
クライアントはステップ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);を使用します。
変化はありません。
どうすればこれを解決できますか?