我必须设计一个互斥锁作为我的任务的一部分。不能使用外部库的支持,只给出系统调用来取消调度并将线程放回就绪队列。我正在使用原子Xchg指令来检查互斥锁的值。但是如果互斥锁不可用,我需要将线程放入队列中。现在,再次将此线程放入队列中我需要一个互斥锁。这导致我进入一个递归问题。我的解决方案是在这里使用旋转等待。由于将线程添加到队列中的代码非常小,我可以预期旋转等待不应该是一个问题。但我在这里错过了一些东西吗?旋转等待还有其他方法吗?此外,如果我旋转等待,则无法保证有限等待。那也有解决方案吗?
我还搜索并发现在pthreads中,使用了对futex的系统调用。我的假设是futex是一个系统调用,它的原子就是在队列中添加一个线程。但是在这里我没有像内核那样的支持。我可以使用的唯一系统调用是去线程并让它们可以运行。