linux - 为什么我们不能访问信号量

标签 linux semaphore

我正在阅读有关信号量的信息,并且 here我发现您不能直接访问(递增/递减)信号量

A Semaphore is an integer variable, which can be accessed only through two operations wait() and signal().

关于这个话题我有两个问题:

  1. 信号量的类型是什么。它是结构还是其他数据类型。

如果它是一个结构那么我的第二个问题是:

  1. 为什么我们不能使用semaphore.some_value++ 访问信号量。

如果它是我在 wikipedia 上找到的变量:

A trivial semaphore is a plain variable Then why can't we access it like semaphore1++?

我试图增加它并得到这个错误:

error: wrong type argument to increment

为什么禁止用户访问,为什么我们必须使用函数才能访问它? (虽然我同意,使用函数并不是坏习惯,但为什么呢?)

最佳答案

信号量的功能不仅在于整数的递增和递减,还在于信号量用户之间的通信。通信方面是由waitsignal 函数封装的。特别是,在大多数操作系统上,它们将使用较低级别的内核功能,以便 wait 不需要浪费 CPU 反复检查信号量的值。

您收到该编译器错误的事实表明,在您的系统上,信号量是一种结构。但是,您无法通过直接访问结构成员来使用信号量,因为这不会影响底层内核对象。

关于linux - 为什么我们不能访问信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240043/

相关文章:

c - 无效的读/写有时会产生段错误,有时不会

linux - 在一台服务器上编辑 perl 脚本,但在另一台服务器上执行

c++ - Vikit_common - 安装失败 - Raspberry Pi 2 B

linux - 我如何找出本地套接字另一端的程序?

Linux 信号量 : spinlock or signals?

c - 如何确定锁定 posix 信号量的进程的优先级?

posix - 是否可以将 System V 共享内存与 POSIX 信号量一起使用?

c++ - 64 位/32 位 IPC 的 POSIX 信号量的替代方案?

linux - 从 bash 脚本中的文本文件添加新用户

java - 使用 java 信号量解决读者/作者问题