我正在学习 Pthreads,并且想知道杀死这样一个对象的最佳方法是什么。在寻找类似问题后,我找不到“明确”的答案,但请随时向我指出任何相关问题。
我正在使用一个小型客户端服务器应用程序,其中服务器主线程正在监听客户端连接的套接字。每次客户端连接时,服务器都会创建一个新线程,在 while true 循环中执行“无限工作”。现在我想在同一个客户端在套接字上发送“停止”请求时停止此循环。
如果知道客户端是通过每个套接字消息中提供的 ID 来识别的,您将如何实现这种行为?使用共享变量(在主服务器线程和客户端服务器线程之间)作为 while 循环中的测试条件。使用 PThread 函数?
最佳答案
没有办法强行杀死单个 POSIX 线程;这是有意设计的。相反,如果您的线程需要被其他线程停止,您应该设计在其中运行的代码以考虑到这一点。执行此操作的惯用方法是使用退出标志变量(由互斥锁保护)和条件变量。
还有pthread_cancel
,可用于请求线程退出。正确使用它需要使用 pthread_cleanup_push
设置清理处理程序和/或使用 pthread_setcancelstate
暂时禁用取消。
关于c - "kill"如何成为Pthread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12029180/