我如何避免在用户模式下抢占我的线程

我有一个确定性的工作,只需要十三个机器指令来完成一个简单的块。 因为第一条指令需要一个自制的信号量(自旋锁),而最后一条指令释放它,所以我可以安全地使用其他内核上运行的所有其他线程,因为它们正在尝试使用相同的信号。

当某个线程在完成其“临界区”之前中断一个持有信号量的线程时,会出现这个问题。 最糟糕的情况是中断杀死线程,同时持有信号量,或者可能发生通常竞争信号量的线程之一分支到可能产生中断导致死锁的代码。

我没有办法与这些其他线程同步,当他们分支到我无法控制的代码部分。 我想我需要禁用中断,就像我以前在VxWorks中使用的那样,当我在内核模式下运行的时候。 它总是十三条指令,如果我可以在完成所有十三条指令之前完成安全的工作,那么我必须遵守一个中断。 哦,这是所有我自己的内部数据,除了自制的信号灯没有什么东西锁住其他的东西了。

我读了几个我认为很接近的答案。 大部分都与Windows API的关键部分调用(错误的操作系统,但也许是正确的概念)。 大多数错误的解决scheme都假定我可以让所有有问题的线程使用我用pthread库创build的互斥锁。

我需要在Linux和Solaris上的C / C ++中使用这个解决scheme。

Johnny Crash的问题非常接近, 防止调度程序中断Linux线程

KermitG也可以防止关键代码中的Linux用户空间pthread屈服?

感谢您的考虑。

您可能不会阻止抢占用户模式线程。 关键部分(和所有其他同步对象)可以防止线程发生冲突,但它们决不会阻止它们被操作系统抢占。

如果你的其他线程在超时时分支到某个东西 ,而这可能导致死锁 – 你有一个设计问题。

一个正确的设计应该是最悲观的:抢占可能会在不确定的时间到处发生。