在Semaphores(操作系统)中传递给sem_init()的参数含义是什么?

时间:2016-11-16 14:03:02

标签: c operating-system mutex semaphore producer-consumer

考虑下面给出的代码段:

    #include <pthread.h>
    #include <semaphore.h>

    sem_t empty;
    sem_t full;
    sem_t mutex;

    int main(int argc, char *argv[]) 
    {
    int MAX = 10;//Size of the Buffer
    sem_init(&empty, 0, MAX);
    sem_init(&full, 0, 0);
    sem_init(&mutex, 0, 1);

    return 0;
    }

我只提到了上面提到的所需代码。它是Producer-Consumer Code的一部分。 sem_init()中每个参数的含义是什么?我可以看出第一个参数是信号量变量的地址,第三个参数是它的值。

为什么第二个参数始终为0?这是什么意思?

我们是否指定信号量的临界值以等待使用第二个参数?

    wait(S) {
    while (S <= 0 )
    ; // busy wait
    S--;
    }

如果我将3作为第二个参数传递给sem_init(),则wait(S)中的while循环是否会更改为

while (S <= 3 )
像这样?

2 个答案:

答案 0 :(得分:1)

请查看http://man7.org/linux/man-pages/man3/sem_init.3.html。关于第二个论点:

  

pshared参数指示是否要共享此信号量   在进程的线程之间或进程之间。

这基本上是布尔值,但请阅读链接以获取更多信息。如果你真的是线程,那么总是应该为0,在极端情况下你在不同的进程上使用线程代码使用非零。

答案 1 :(得分:1)

总是尝试阅读Linux文档(man <command or system_call>)以解决这些疑问。

针对您的案例man sem_init
 sem_init()在指向的地址初始化未命名的信号量        由sem。 value参数指定的初始值        信号。

手册页的<{3}}