首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于librt.so.1的timer_helper_thread()的一些信息

关于librt.so.1的timer_helper_thread()的一些信息
EN

Stack Overflow用户
提问于 2010-11-24 14:15:24
回答 2查看 1.3K关注 0票数 0

谁能给出一些关于librt.so.1的timer_helper_thread()函数的信息?

我在应用程序中使用posix timer_create()函数实现计时器功能,使用SIEV_THREAD实现通知功能。当超时发生时,我可以在gdb中看到创建了两个线程。一个是我已经指定了启动函数的线程,另一个是启动函数是librt.so.1的timer_help_therad()的线程。在这两种情况下,timer_helper_thread()即使在我的线程退出之后也不会退出。没有人能告诉我timer_helper_thread()什么时候退出,并提供一些相关信息吗?

EN

回答 2

Stack Overflow用户

发布于 2010-11-24 16:23:49

简而言之:不用担心;这是一个实现细节,当您的程序退出时,它会自动清除。但如果你很好奇..。

来自glibc的timer_create(2)手册页:

SIGEV_THREAD:在计时器到期时,调用sigev_notify_function,就好像它是新线程的启动函数一样。(在这里的实现可能性中,每个计时器通知都可能导致创建一个新线程,或者创建一个线程来接收所有通知。)

还有:

SIGEV_THREAD的功能是在glibc内实现的,而不是内核。

因此,glibc (即librt.so)假设内核不能创建线程来响应计时器事件--它所支持的只是发送信号。因此需要有人接收该信号并创建处理程序线程。如果你想自己处理接收信号的细节,你就不会使用SIGEV_THREAD,所以glibc不会打扰你,而是创建自己的线程来处理计时器事件。

这个计时器辅助线程从你第一次调用timer_create()开始一直持续到你的程序结束。除非您正在做一些不寻常的事情,否则您不必担心它;当您的程序退出时,它会自动清除。它所做的唯一一件事就是等待计时器超时,所以它不会消耗任何额外的处理能力。而且,不管你创建了多少个计时器,看起来只有一个辅助线程。

票数 0
EN

Stack Overflow用户

发布于 2011-02-09 00:56:33

@jander:你的评论很有趣,“这个计时器助手线程从你第一次调用timer_create()到你的程序结束。”每次计时器超时时,都会创建线程。这和你提到的timer_helper_thread()是一样的吗?我有一个类似的帖子,我观察到只为timer_create()创建了一个单独的线程。这会是timer_helper_thread()吗?参考:New thread on invocation of timer_create()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4263958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档