首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux环境,计时器回调和应用程序线程之间的同步

Linux环境,计时器回调和应用程序线程之间的同步
EN

Stack Overflow用户
提问于 2017-08-23 15:37:02
回答 1查看 166关注 1票数 0

如果我在一个进程中有两个线程A和B,并且线程A创建了一个计时器,因为计时器回调可以中断任何一个线程,这是否意味着(在线程和计时器回调之间)对共享对象的访问需要同步?也有人说,定时器回调和应用程序线程之间的同步是不安全的,比如线程A锁定了一个互斥mA,然后被定时器回调中断,在定时器回调中它也试图锁定mA,这时死锁就发生了。我上面的陈述对吗?如果是真的,为了避免同步问题,在定时器回调中有很多限制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-23 16:21:12

与信号相关的问题的最简单解决方案是不异步处理信号。有几种方法可以做到这一点。

首先,如果一个信号到达一个进程组,最好只有一个线程不阻塞该信号。

接下来,精确的解决方案取决于程序的主循环看起来是什么样子。最有可能的是,这是一个围绕select/epoll的循环。如果是这样,请查看pselectepoll_pwait,并确保您理解他们所说的内容。以这种方式处理信号意味着您的信号处理程序与您的实际程序同步运行,几乎消除了所有的限制。

一种更好的解决方案(但仅适用于Linux )是不使用信号处理程序处理信号,而是使用signalfd将其转换为文件描述符。

最后,但决不是最不重要的,如果你想要的是处理文件描述符+基于计时器的操作,有一些库可以为你将其包装在面向性能的实现中。您还可以在不收取额外费用的情况下获得平台独立性。

两个这样的库是libeventlibev

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

https://stackoverflow.com/questions/45833458

复制
相关文章

相似问题

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