wap*_*omo 5 c++ linux interrupt critical-section preemption
我有一个简单的确定性工作,只需要十三个机器指令就可以完成.因为第一个指令需要一个自制的信号(自旋锁)和最后一条指令释放它,我从所有其他内核上运行,因为他们正试图采取并给出相同信号的其他线程安全的.
当一些线程在完成其"关键部分"之前中断持有信号量的线程时,会出现问题.最坏的情况是,中断会在保持信号量的同时杀死线程,或者可能发生通常竞争信号量的一个线程分支到可能产生中断导致死锁的代码中.
当它们分支到我无法控制的代码部分时,我没有办法与这些其他线程同步.我认为我需要禁用中断,就像我在旧的VxWorks时代那样,当我在内核模式下运行时.它总是十三条指令,如果我能在完成中断之前完成所有十三条指令,我总是完全安全的.哦,这是我自己的内部数据,其他的自制信号量没有什么可以锁定任何其他东西.
我已经阅读了几个我认为很接近的答案.大多数都与Windows API上的Critical Section调用有关(错误的操作系统,但可能是正确的概念).大多数错误的解决方案都假设我可以让所有违规的线程使用我使用pthread库创建的互斥锁.
我需要在Linux和Solaris上使用C/C++的这个解决方案.
Johnny Crash的问题非常接近, 防止linux线程被调度程序中断
KermitG还 可以阻止Linux用户空间pthread在关键代码中产生吗?
谢谢你的考虑.
您可能无法阻止用户模式线程的抢占。关键部分(以及所有其他同步对象)可以防止线程冲突,但是它们决不能阻止它们被操作系统抢占。
如果您的其他线程在超时时分支到某些内容,而该内容可能会导致死锁 - 您就会遇到设计问题。
正确的设计应该是最悲观的:在不确定的时间里,到处都可能发生抢占。
| 归档时间: |
|
| 查看次数: |
4097 次 |
| 最近记录: |