我正在构建 2 个通过 FIFO 进行通信的程序(客户端/服务器)。两个程序都有线程。当客户端的线程结束时,它不会被加入,并且 main 挂起。
这些程序执行以下操作:
服务器:
- main:从 FIFO1 读取
- main:创建线程来处理请求。
- 主要:转到1
- 线程:处理请求
- 线程:向 FIFO2 发送响应
- 线程:退出
客户:
- main:生成线程
- 线程:从 FIFO2 读取 X 对客户端的响应
- 线程:退出
- main:向 FIFO1 发送 X 个请求
- 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);
不会产生任何变化。
我该如何解决这个问题?