C pthread加入一个已结束的线程

时间:2012-05-23 10:57:58

标签: c join pthreads pthread-join

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

程序执行以下操作:

服务器:

  1. main:从FIFO1读取
  2. main:创建处理请求的线程。
  3. main:goto 1
  4. thread:进程请求
  5. 线程:向FIFO2发送回复
  6. thread:exit
  7. 客户端:

    1. main:spawn thread
    2. thread:从FIFO2读取客户端的X响应
    3. thread:exit
    4. main:向FIFO1发送X请求
    5. main:等待线程退出
    6. main:检查回复
    7. 服务器运行良好,所有线程都相应地连接。

      客户端在步骤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);

      不会产生任何变化。

      我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

好的pthread_join接收线程id,而不是它的地址。这一行:

pthread_join(&reader,NULL);

应该是:

pthread_join(reader,NULL);

如果reader被声明为pthread_t

希望这不仅仅是你问题中的错误,而且这确实有帮助。