问题标签 [pthread-exit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
863 浏览

c - 分离的线程不会退出,尽管它运行 pthread_exit?

几天来,我一直在处理线程池中的一个问题。我尝试了所有类型的不同的东西,但我似乎无法解决这个问题。我制作了一个简单的版本来重现该问题。

代码:

代码的作用是创建两个线程。两个线程都在一个二进制信号量(bsem_wait)上等待。然后在他们等待时,我向SIGUSR1两者发送信号,导致pthread_exit()在每个线程上执行。在我的终端上,它显示一切都按计划进行。

输出:

问题

尽管输出看起来是正确的,但 usingpstree表明只有两个线程中的一个死掉了。另一个线程保持活动状态,直到整个程序退出。为什么是这样?


更新

用普通信号量替换我的自定义二进制信号量似乎没有明显的原因解决了这个问题。

0 投票
1 回答
149 浏览

multithreading - pthread_exit() 也会关闭打开的文件吗?

我在线程中打开了一个文件并使用 pthread_exit() 例程终止了线程。它也会关闭打开的文件吗?

0 投票
2 回答
526 浏览

c++ - 为什么 pthread_exit 的行为类似于 pthread_join?

代码:

为什么pthread_exit(NULL)这里的行为像pthread_join()?即为什么退出main不破坏printHello线程并允许它继续?

0 投票
2 回答
273 浏览

c - 如何在退出之前保存线程堆栈?

我正在开发一个多线程项目,我需要在代码中的某个位置复制一个线程的堆栈(我需要一个指向它的指针)。因为在这个线程退出(并且它的堆栈被释放)之后我将需要那个指针。pthread_exit()如果我能以某种方式告诉不要释放线程堆栈,它也可以完成这项工作!

PS:这背后的原因是我想setcontext(ucontext_t*)稍后在这个线程实际上已经死了的时候使用。

0 投票
1 回答
407 浏览

multithreading - 客户端在 C 中的服务器线程中的 pthread_exit() 之后挂起

我有一个服务器来处理多个客户端。每个连接到它的客户端都在自己的线程中提供服务。现在,如果服务器端发生任何错误,我想通过调用 pthread_exit 退出该线程,并终止该线程正在服务的客户端。然而; 当我尝试这样做时,我的客户正在挂起。此外,这也会导致处于不同线程中的其他客户端也挂起。我在一个随机的地方调用了 pthread_exit 来测试它......

0 投票
1 回答
215 浏览

c++ - 在 main 函数中调用 join child pthread

我有测试代码:

在 main() 函数中,如果我调用 join(the_worker2):

--> 段错误错误

否则,我打电话:

---> 好的

为什么在上述情况下会出现段错误?感谢帮助 !!!

0 投票
1 回答
153 浏览

c - 仅在需要时运行的 Posix pthread worker

我有一个工作线程进行轮询活动(它的目标是 libcurl,但这不相关)。

应用程序的许多操作都可以启动工作线程,但如果它已经在运行,则不应创建新线程。来自应用程序的新请求只需与任何其他正在进行的轮询相结合。

总之,当无事可做时退出的单个工作线程。

代码是:

我怀疑线程安全。函数 start_worker_thread_if_needed() 可以在任何时间任意多次调用。

那么,如果 start_worker_thread_if_needed() 恰好在我们退出 while 循环并因此中断工作线程时被调用怎么办。如果发生这种情况,条件 if (thread == NULL) 将为 FALSE,因为工作线程被中断并且 pthread_exit + thread = NULL 尚未完成。

所以现在 start_worker_thread_if_needed() 将退出而不创建新线程,但是一旦控制权返回到旧的工作线程,它将继续到 pthread_exit 行并且工作线程被销毁。

问题将是刚刚触发 start_worker_thread_if_needed() 的请求将丢失,并且轮询将在下一次调用 start_worker_thread_if_needed() 之前开始。

编辑:这是一个关于互斥锁的建议,但我仍然有同样的疑问。如果主线程在我们退出 while 循环之后和 worker 可以获取互斥锁之前中断会发生什么。然后主线程不创建新线程然后worker退出。

我认为我的设置方式存在缺陷,如果有人可以提供正确的解决方案,我将不胜感激。

0 投票
1 回答
1480 浏览

c - 为什么 pthread_exit(0) 会挂起程序?

运行以下 C 代码会导致程序挂起,并且不响应信号(包括 CTRL-C)。

知道为什么吗?

当其他线程已创建并正在运行时,这种行为是正常的,但我想知道在使用 pthread_exit(0) 之前是否总是需要检查它。

编辑:这是挂起的完整代码。但是,我是用 glib (-lglib-2.0) 构建的。简单地使用 cc -o foo foo.c 可以按预期工作。

0 投票
3 回答
2216 浏览

c++ - pthread_exit(NULL); 不工作

这是我创建一些线程的代码。我想同时创建 500 个线程,而不是更多。很简单,但是我的代码在创建 32xxx 个线程后失败了。

然后我不明白为什么我在 32751 个线程之后得到错误代码 11,因为每个线程都结束了。

我可以理解,如果线程不退出,那么同一台计算机上的 32751 个线程......但是在这里,每个线程都退出了。

这是我的代码:

0 投票
2 回答
62 浏览

c - 根据调用线程的变量值关闭线程

我在 C 中使用 posix 线程。我的程序中有两个线程,thread1 和 thread2。线程 1 启动线程 2。

thread1 维护一个变量 var1,基于该变量必须安全退出 thread2。

thread2 调用许多冗长的函数(其运行时间最长可达 5 秒)。在thread2中有很多使用malloc的内存分配。一旦 var1 变为真,我需要关闭 thread2,但只有在释放所有分配的内存之后。如何做到这一点?

代码如下所示: