2016-03-05 28 views
-2

所以我需要实现线程之间的锁定机制C. 某种替代来:如何在不使用互斥锁,futex和信号量的情况下实现“锁定”机制?

pthread_mutex_lock 
pthread_cond_wait (mostly for synchronization) 

对于调用pthread_cond_wait,我做了一些研究,发现我可以使用信号:调用sigwait ,一个等待线程的监听...

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

+0

等调用sigwait可能使用这些原语内部反正。在用户空间中,如果不旋转某些原子变量,您可能无法实现正确的等待。暂停一个线程通常要求您有权访问操作系统线程调度程序或其他低级特权CPU指令。你在为什么开发平台? – jotik

+0

我在Linux上工作 编辑:比较和交换怎么样?它在这种情况下有帮助吗? – user52713

+1

Afaik您不能在Linux中暂停用户空间中的线程。最终需要调用Linux内核来暂停执行线程。唯一的选择是旋转,使用比较和交换或任何其他原子可供您使用。 – jotik

回答

0

为什么你需要一个替代品,是为了表现,为了锻炼还是其他?

A spinlock是互斥体的替代方案,但没有退避机制,您必须忙于等待,这通常是不推荐的。 pthread互斥实现为具有futex回退的自旋锁。

pthread包括一个不退款spinlock所以你不必自己写。

如果只是为了锻炼,而且你可以打电话睡觉,那么你可以在那里建立一些东西。

可以使用自旋锁锁住一些国家管理的变量和条件语句模拟,信号灯等