【发布时间】:2018-08-10 18:22:00
【问题描述】:
这是我的服务器代码。执行老板工人。我指定线程工作者的数量。问题是有时它不回复我的客户,而且大多停留在接收状态。有时它会执行,但前提是客户端线程最少。客户端线程有时无法连接。 任何人都可以指出错误。 谢谢。
【问题讨论】:
-
TLDR;你在启动它们后
pthread_join()你的线程吗? -
不要使用
puts()/printf()来调试程序,尤其是多线程程序,因为stdout通常是缓冲的。他们也可能在实现内部有锁。您最好使用特定于操作系统的低级直接写入标准错误,例如 POSIX 样式系统上的write( 2, debugString, strlen( debugString );。 -
@IharobAlAsimi 是的,我用过。你可以在最后看到
-
另外,那个代码太复杂了。一件坏事——你的主线程总是假设它可以找到一个空闲线程。没有必要。使用简单的生产者-消费者模式而不是看起来像生产者-消费者-where-the-producer-tries-to-tell-the-consumer-what-to-do 模式,你会做得更好。只需做一些简单的事情,比如将接受的
int套接字值写入管道,让线程从管道中读取int大小的套接字值,然后传递传入的连接。 -
我不排除您的代码结构中存在简单的错字。这种怀疑的原因是一行中有两个“隐藏的”花括号。通过自动缩进器/自动格式化程序运行您的代码。首先,它使其可读,例如人她。例如,我不会在当前状态下对其进行详细检查。其次,它确保缩进实际上遵循结构,这有助于发现/避免可疑的错误。顺便说一句:代码中有大量的强制转换,没有一个是绝对必要的。
标签: c multithreading client-server threadpool worker-thread