如何在C中实现自己的信号量?

如何在C中实现自己的信号量?,c,function,semaphore,consumer,producer,C,Function,Semaphore,Consumer,Producer,我正在通过不同的方法解决生产者/消费者问题。我目前正在研究的是我自己的信号量实现,与Peterson的解决方案配合使用,以保护信号量的down()和up()函数调用 问题是,我使用的是C语言,我能想到的创建信号量的唯一方法是使用带有函数指针的结构来表示down()和up()。这是正确的想法吗?检查,这是一个用户空间syn原语。但我不认为您正在寻找这么复杂的东西。您可能希望使用一些操作系统提供的或硬件提供的同步原语。示例包括系统调用(例如Linux的futex调用、Windows的EnterCri

我正在通过不同的方法解决生产者/消费者问题。我目前正在研究的是我自己的信号量实现,与Peterson的解决方案配合使用,以保护信号量的down()和up()函数调用


问题是,我使用的是C语言,我能想到的创建信号量的唯一方法是使用带有函数指针的结构来表示down()和up()。这是正确的想法吗?

检查,这是一个用户空间syn原语。但我不认为您正在寻找这么复杂的东西。

您可能希望使用一些操作系统提供的或硬件提供的同步原语。示例包括系统调用(例如Linux的
futex
调用、Windows的
EnterCriticalSection
)、硬件交换调用(例如x86上的
cmpxchg
、ARM上的
ldrex/strex
)或使用这些方法之一的库函数(例如
pthread\u mutex


在没有操作系统或硬件帮助的情况下尝试进行同步可能非常困难

函数指针似乎与问题无关:您可以调用
up(my_信号量)
而不是
my\u信号量->向上(my\u信号量)。(在C语言中,如果没有参数,就不能真正拥有
my\u信号量->up()
,因为没有隐式的
传递这个
参数,因此函数会知道哪个信号量调用了它。)