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

时间:2018-01-13 12:53:15

标签: linux semaphore

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

  

信号量是一个整数变量,只能通过两个操作wait()和signal()来访问。

我对这个主题有两个问题:

  1. 信号量的类型是什么。它是一种结构还是其他一些数据类型。
  2. 如果是结构,那么我的第二个问题是:

    1. 为什么我们无法使用semaphore.some_value++访问信号量。
    2. 如果它是我在wikipedia上找到的变量:

        

      一个简单的信号量是一个普通的变量   那为什么我们不能像semaphore1++那样访问它?

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

        

      错误:增加错误的类型参数

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

1 个答案:

答案 0 :(得分:1)

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

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