我正在阅读有关信号量的信息,并且 here我发现您不能直接访问(递增/递减)信号量。
A Semaphore is an integer variable, which can be accessed only through two operations wait() and signal().
关于这个话题我有两个问题:
- 信号量的类型是什么。它是结构还是其他数据类型。
如果它是一个结构那么我的第二个问题是:
- 为什么我们不能使用
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
为什么禁止用户访问,为什么我们必须使用函数才能访问它? (虽然我同意,使用函数并不是坏习惯,但为什么呢?)
最佳答案
信号量的功能不仅在于整数的递增和递减,还在于信号量用户之间的通信。通信方面是由wait
和signal
函数封装的。特别是,在大多数操作系统上,它们将使用较低级别的内核功能,以便 wait
不需要浪费 CPU 反复检查信号量的值。
您收到该编译器错误的事实表明,在您的系统上,信号量是一种结构。但是,您无法通过直接访问结构成员来使用信号量,因为这不会影响底层内核对象。
关于linux - 为什么我们不能访问信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240043/