【问题标题】:Structure of sem_t and implementation of semaphoressem_t的结构和信号量的实现
【发布时间】:2013-04-18 13:44:35
【问题描述】:

在 C 编程语言中,为什么我们需要一个特殊的 sem_t 类型来定义信号量?那不能是一个整数吗? sem_t 是如何定义的? sem_post 和 sem_wait 函数是如何实现的? 编辑:像 GNU C 库这样的示例实现会很棒。

【问题讨论】:

  • sem_t 类型是故意未定义的,因为它取决于具体的实现如何实现它。如果您想了解 one 实现,可以将源代码下载到 GNU C library 并自己阅读源代码。

标签: c linux posix semaphore


【解决方案1】:

信号量是操作系统内核管理的对象,因此 sem_t 将是操作系统特定的,信号/等待调用也是如此,因为它们也必然会调用操作系统内核。

通常,信号量由一个单元计数和一个等待线程的队列来实现。

【讨论】:

  • linux中的信号量(即有sem_wait,sem_post...)不是在用户空间实现的吗?
  • @PaulDaviesC 我不明白怎么可能。如果信号量为空,sem_wait() 必须阻塞调用者,这需要内核支持。
猜你喜欢
  • 2021-08-13
  • 2011-08-25
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2013-12-07
相关资源
最近更新 更多