【问题标题】:Why can't we access semaphore为什么我们不能访问信号量
【发布时间】:2018-01-13 12:53:15
【问题描述】:

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

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: linux semaphore


    【解决方案1】:

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

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

    【讨论】:

    • 所以,基本上semaphore.h文件中的wait()定义下还有一些代码,这有助于同步而不仅仅是信号量的值,用户不应该为这些而烦恼操作?
    • 如果我强行改变它的值,可能会导致一些错误。
    • 是的,代码不仅在wait()定义下,而且在决定允许哪个线程运行的内核调度器中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多