C 如何实施;“锁定”;不使用互斥、futex和信号量的机制?

C 如何实施;“锁定”;不使用互斥、futex和信号量的机制?,c,multithreading,pthreads,C,Multithreading,Pthreads,所以我需要在C中实现线程之间的锁定机制。 某种替代方案: pthread_mutex_lock pthread_cond_wait (mostly for synchronization) 对于pthread_cond_wait,我做了一些研究,发现我可以使用Signals:sigwait,一个等待线程的列表 但是我找不到一个解决方案来锁定线程之间对共享变量和数据的访问。为什么需要一个替代方案,是为了性能,为了锻炼,还是其他什么 A是互斥的替代品,但没有回退机制,您必须忙着等待,这通常是不推

所以我需要在C中实现线程之间的锁定机制。 某种替代方案:

pthread_mutex_lock 
pthread_cond_wait (mostly for synchronization)
对于pthread_cond_wait,我做了一些研究,发现我可以使用Signals:sigwait,一个等待线程的列表


但是我找不到一个解决方案来锁定线程之间对共享变量和数据的访问。

为什么需要一个替代方案,是为了性能,为了锻炼,还是其他什么

A是互斥的替代品,但没有回退机制,您必须忙着等待,这通常是不推荐的。pthread互斥锁被实现为带有futex回退的自旋锁

pthread包含一个no-back-off,因此您不必自己编写它

如果只是为了锻炼,你可以称之为睡眠,你可以在此基础上构建一些东西


您可以使用自旋锁来锁定一些状态管理变量,并模拟条件、信号量等。

sigwait等。可能在内部使用这些原语。在用户空间中,如果不旋转某些原子变量,您可能无法实现适当的等待。暂停线程通常需要访问操作系统线程调度程序或其他低级特权CPU指令。您开发的平台是什么?我正在从事Linux编辑:Compar和Swap呢?在这种情况下有帮助吗?好吧,在Linux中不能在用户空间中暂停线程。最终需要调用Linux内核来暂停线程的执行。唯一的选择是旋转,使用比较和交换或任何其他原子原语。