我正在通过不同的方法解决生产者/消费者问题。我目前正在研究的一个涉及我自己的信号量实现,与 Peterson 的解决方案配对以保护信号量的 down() 和 up() 函数调用。
问题是,我正在使用 C 语言工作,我能想到的创建信号量的唯一方法是使用带有函数指针的结构,用于 down() 和 up()。这是正确的想法吗?
您可能希望使用一些操作系统提供或硬件提供的同步原语。示例包括系统调用(例如 Linux 的futex
调用、Windows' EnterCriticalSection
)、硬件交换调用(例如cmpxchg
在 x86 上、ldrex/strex
在 ARM 上)或使用这些方法之一的库函数(例如pthread_mutex
)。
在没有操作系统或硬件帮助的情况下尝试进行同步可能非常困难。
检查 futex,它是一个用户空间同步原语。但我不认为你在寻找这么复杂的东西。