繁体   English   中英

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

[英]C pthread join an ended thread

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

该计划执行以下操作:

服务器:

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

客户:

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

不会产生任何变化。

我该如何解决这个问题?

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

pthread_join(&reader,NULL);

应该:

pthread_join(reader,NULL);

如果reader被声明为pthread_t

希望这不仅仅是你问题中的拼写错误,这实际上有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM