我有一个确定性的工作,只需要十三个机器指令来完成一个简单的块。 因为第一条指令需要一个自制的信号量(自旋锁),而最后一条指令释放它,所以我可以安全地使用其他内核上运行的所有其他线程,因为它们正在尝试使用相同的信号。
当某个线程在完成其“临界区”之前中断一个持有信号量的线程时,会出现这个问题。 最糟糕的情况是中断杀死线程,同时持有信号量,或者可能发生通常竞争信号量的线程之一分支到可能产生中断导致死锁的代码。
我没有办法与这些其他线程同步,当他们分支到我无法控制的代码部分。 我想我需要禁用中断,就像我以前在VxWorks中使用的那样,当我在内核模式下运行的时候。 它总是十三条指令,如果我可以在完成所有十三条指令之前完成安全的工作,那么我必须遵守一个中断。 哦,这是所有我自己的内部数据,除了自制的信号灯没有什么东西锁住其他的东西了。
我读了几个我认为很接近的答案。 大部分都与Windows API的关键部分调用(错误的操作系统,但也许是正确的概念)。 大多数错误的解决scheme都假定我可以让所有有问题的线程使用我用pthread库创build的互斥锁。
在linux内核中的指令{interrupt do_IRQ}是什么意思?
为什么softirq用于高线程和高频率的应用?
需要产生一个稳定的10mSec中断
如何在linux中知道特定引脚的中断/ GPIO编号
为什么我们需要在ARM Linux cpu_idle中的WFI之前禁用中断
我需要在Linux和Solaris上的C / C ++中使用这个解决scheme。
Johnny Crash的问题非常接近, 防止调度程序中断Linux线程
KermitG也可以防止关键代码中的Linux用户空间pthread屈服?
感谢您的考虑。
为什么禁止中断禁止内核抢占以及自旋locking如何禁用抢占
中断向量中是否有系统调用服务程序?
UIO驱动程序 – 切换到内核中断
多核处理器中基于轮询和中断的数据包处理方法
将两个数字卡连接到星号箱时的IRQ问题
您可能不会阻止抢占用户模式线程。 关键部分(和所有其他同步对象)可以防止线程发生冲突,但它们决不会阻止它们被操作系统抢占。
如果你的其他线程在超时时分支到某个东西 ,而这可能导致死锁 – 你有一个设计问题。
一个正确的设计应该是最悲观的:抢占可能会在不确定的时间到处发生。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。