为什么我们不能访问信号量
Why can't we access semaphore
我正在阅读有关信号量的内容,here我发现您无法直接访问 (increment/decrement) 信号量。
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 反复检查信号量的值。
您收到该编译器错误这一事实表明,在您的系统上,信号量是一种结构。但是,您不能通过直接访问结构成员来使用信号量,因为这不会影响底层内核对象。
我正在阅读有关信号量的内容,here我发现您无法直接访问 (increment/decrement) 信号量。
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 反复检查信号量的值。
您收到该编译器错误这一事实表明,在您的系统上,信号量是一种结构。但是,您不能通过直接访问结构成员来使用信号量,因为这不会影响底层内核对象。