c - "kill"如何成为Pthread?

标签 c sockets pthreads client-server

我正在学习 Pthreads,并且想知道杀死这样一个对象的最佳方法是什么。在寻找类似问题后,我找不到“明确”的答案,但请随时向我指出任何相关问题。

我正在使用一个小型客户端服务器应用程序,其中服务器主线程正在监听客户端连接的套接字。每次客户端连接时,服务器都会创建一个新线程,在 while true 循环中执行“无限工作”。现在我想在同一个客户端在套接字上发送“停止”请求时停止此循环。

如果知道客户端是通过每个套接字消息中提供的 ID 来识别的,您将如何实现这种行为?使用共享变量(在主服务器线程和客户端服务器线程之间)作为 while 循环中的测试条件。使用 PThread 函数?

最佳答案

没有办法强行杀死单个 POSIX 线程;这是有意设计的。相反,如果您的线程需要被其他线程停止,您应该设计在其中运行的代码以考虑到这一点。执行此操作的惯用方法是使用退出标志变量(由互斥锁保护)和条件变量。

还有pthread_cancel,可用于请求线程退出。正确使用它需要使用 pthread_cleanup_push 设置清理处理程序和/或使用 pthread_setcancelstate 暂时禁用取消。

关于c - "kill"如何成为Pthread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12029180/

相关文章:

Java - SSL - 使用 gmail 的 SMTP 服务器进行身份验证

Cygwin html 到浏览器

c++ - 查找僵尸线程的来源

c++ - 循环之间的 pthread_create 中重复的线程 ID?

c++ - 传递 &arr(整个 block 的地址)或仅传递数组名称(第一个元素的地址)有什么区别吗?

c - 如何在 C 中使用 "same probability"获取从 0 到 N-1 的随机数?

java - 通过socket同时接收两条消息

c - 如何按顺序从pthreads中的每个线程打印?

当代码直接使用 gcc 运行时,Python C 版本为 : "undefined symbol" errror,

C 指针位置,十进制和十六进制