我正在构建通过FIFO进行通信的2个程序(客户端/服务器)。两个程序都有线程。当客户端的线程结束时,它不会加入,并且主要挂起。
程序执行以下操作:
服务器:
客户端:
服务器运行良好,所有线程都相应地连接。
客户端在步骤5中失败。使用
pthread_join(&reader,NULL);
永远挂起主力。我已经检查过,线程已经结束了。
使用
pthread_tryjoin_np(&reader,NULL);
我得到了
errorcode = 16
strerror给出了
设备或资源繁忙
使用以下命令创建线程:
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
pthread_create(&reader,&attr,trataResp,NULL);
或者: 在pthread_create(安培;读取器,NULL,trataResp,NULL);
不会产生任何变化。
我该如何解决这个问题?
答案 0 :(得分:4)
好的pthread_join接收线程id,而不是它的地址。这一行:
pthread_join(&reader,NULL);
应该是:
pthread_join(reader,NULL);
如果reader
被声明为pthread_t
。
希望这不仅仅是你问题中的错误,而且这确实有帮助。