【发布时间】:2020-11-07 15:36:52
【问题描述】:
所以我使用了一个变量
std::vector<pthread_t> preallocatedThreadsPool;
保存所有 pthreads, 然后我使用 for 循环
preallocatedThreadsPool.resize(preallocatThreadsNumber); // create a threadpoOl
for(pthread_t i : preallocatedThreadsPool) {
pthread_create(&i, NULL, threadFunctionUsedByThreadsPool, NULL);
}
创建线程池,
问题是我如何真正破坏它,例如,当我向程序发送信号时,我需要手动处理程序以停止所有预先分配的 pthreads?
我尝试使用另一个 for 循环并在 for 循环内调用pthread_exit(i),
但是IDE,告诉我for循环只会执行一次,这显然不起作用
我尝试使用 preallocatedThreadsPool.clear() 来清理向量,但是当我使用 gdb工具调试一下,在info threads里面,线程还在吗?
在我的情况下,有没有一种好方法可以销毁所有预先分配的 pthread?
【问题讨论】:
-
请不要标记不相关的语言。 (固定)
-
Formget pthreads 并使用
std::thread。 -
是整个程序终止,还是你的意思是你想停止池中的线程而其他线程继续运行?您是否需要某种有序的、先完成的-您正在做的-现在关闭,还是可以接受强制硬停止?
-
@John Bollinger。就像我提到的,例如,我的程序是一个服务器,它在后台作为守护程序服务运行,当我发送一个信号(比如 sighup)来重新配置服务器时,在这个 sighup 处理程序中,我必须手动清空这个 preallocatedThreadsPool ,然后重新创建它以再次重新启动服务器
标签: c++ server pthreads threadpool