3

我正在构建 2 个通过 FIFO 进行通信的程序(客户端/服务器)。两个程序都有线程。当客户端的线程结束时,它不会被加入,并且 main 挂起。

这些程序执行以下操作:

服务器:

  1. main:从 FIFO1 读取
  2. main:创建线程来处理请求。
  3. 主要:转到1
  4. 线程:处理请求
  5. 线程:向 FIFO2 发送响应
  6. 线程:退出

客户:

  1. main:生成线程
  2. 线程:从 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);

不会产生任何变化。

我该如何解决这个问题?

4

1 回答 1

4

那么 pthread_join 接收线程 ID,而不是它的地址。这一行:

pthread_join(&reader,NULL);

应该:

pthread_join(reader,NULL);

如果reader被声明为pthread_t.

希望这不仅仅是您的问题中的错字,而且这实际上有所帮助。

于 2012-05-23T12:39:42.627 回答