加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何在linux上实现线程安全计时器?

发布时间:2020-12-14 00:43:58 所属栏目:Linux 来源:网络整理
导读:我们知道,在信号处理程序中执行操作非常糟糕,因为它们在类似中断的上下文中运行.当调用信号处理程序时,很可能保持各种锁(包括malloc()堆锁!). 所以我想在不使用信号机制的情况下实现线程安全定时器. 我能怎么做? 对不起,实际上,我并不期待有关线程安全的答
我们知道,在信号处理程序中执行操作非常糟糕,因为它们在类似中断的上下文中运行.当调用信号处理程序时,很可能保持各种锁(包括malloc()堆锁!).

所以我想在不使用信号机制的情况下实现线程安全定时器.

我能怎么做?

对不起,实际上,我并不期待有关线程安全的答案,但是关于在Unix或Linux上实现一个线程安全的计时器的答案.

解决方法

在你的线程中使用usleep(3)或sleep(3).这将阻止线程,直到超时到期.

如果您需要等待I / O并且在任何I / O就绪之前有一个计时器到期,请使用select(2),poll(2)或epoll(7)并超时.

如果你仍然需要使用信号处理程序,使用管道(2)创建一个管道,在线程的读取端执行阻塞读取,或使用select / poll / epoll等待它准备就绪,并写入一个字节使用write(2)在信号处理程序中写入管道的结尾.你写入管道的内容并不重要 – 想法是让你的线程醒来.如果要在一个管道上复用信号,请将信号编号或其他ID写入管道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读