Multithreading 互斥体中队列的互斥体

Multithreading 互斥体中队列的互斥体,multithreading,concurrency,synchronization,mutex,Multithreading,Concurrency,Synchronization,Mutex,我必须设计一个互斥锁作为我任务的一部分。无法使用外部库的支持,只提供取消调度并将线程放回就绪队列的系统调用。我使用原子Xchg指令检查互斥量的值。但是如果互斥不可用,我需要将线程放入队列中。现在,要再次将此线程放入队列,我需要一个互斥锁。这让我陷入了一个递归问题。我的解决方案是在这里使用旋转等待。由于用于将线程添加到队列中的代码非常小,我可以预期旋转等待不应该是一个问题。但我是不是遗漏了什么?除了旋转等待还有别的方法吗?而且,如果我旋转等待,就不能保证有界等待。也有解决办法吗 我还搜索并发现在p

我必须设计一个互斥锁作为我任务的一部分。无法使用外部库的支持,只提供取消调度并将线程放回就绪队列的系统调用。我使用原子Xchg指令检查互斥量的值。但是如果互斥不可用,我需要将线程放入队列中。现在,要再次将此线程放入队列,我需要一个互斥锁。这让我陷入了一个递归问题。我的解决方案是在这里使用旋转等待。由于用于将线程添加到队列中的代码非常小,我可以预期旋转等待不应该是一个问题。但我是不是遗漏了什么?除了旋转等待还有别的方法吗?而且,如果我旋转等待,就不能保证有界等待。也有解决办法吗


我还搜索并发现在pthreads中,使用了对futex的系统调用。我的假设是futex是一个系统调用,它的原子性是向队列中添加一个线程。但在这里,我并没有任何来自内核的支持。对我来说,唯一可用的系统调用是取消线程调度并使其可运行。

您是在尝试编写正确的代码还是优化的代码?如果是前者,则忽略有界等待的问题。如果是后者,你在泰坦尼克号上重新安排躺椅,而要实现一个优化的互斥,你需要处理一长串更严重的问题。
我可以预料,旋转等待不应该是一个问题。但是我在这里遗漏了什么吗?
只要正确地实现和使用spinlock,它就会工作。但您还没有提供检查正确性的代码。@Tsyvarev代码工作正常。但我对设计实现很好奇,确切地说,有没有比旋转等待更好的方法在等待互斥的线程队列中添加一个线程?@DavidSchwartz。如果有比旋转等待更好的方法呢?因为我只是想确保我没有在这里浪费CPU周期。我的意思是,我们可以在另一个同步原语中使用一个同步原语,但最后,递归地,在根上必须有少量的自旋等待。正确的?假设禁用中断不是一个选项。
有没有比…
更好的方法-什么是定义关系“更好”的信条?表演?它取决于操作系统、体系结构、编程语言、工作负载等。但同样,您没有提供此列表中的任何内容。有无锁算法,但它们的应用取决于许多因素。请注意,堆栈溢出是问答引用,而不是讨论的论坛。你的问题太宽泛,无法回答。另见。