【问题标题】:How do I implement my own semaphore in C?如何在 C 中实现自己的信号量?
【发布时间】:2014-02-27 05:01:29
【问题描述】:

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

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

【问题讨论】:

  • 函数指针似乎与问题无关:您可以调用up(my_semaphore); 而不是my_semaphore->up(my_semaphore);。 (在 C 中,my_semaphore->up() 不能没有参数,因为没有传递隐式的 this 参数,因此函数会知道哪个信号量调用了它。)

标签: c function semaphore consumer producer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    检查futex,它是一个用户空间同步原语。但我不认为你在寻找这么复杂的东西。

    【讨论】:

      最近更新 更多