考虑下面给出的代码段:
#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 )
像这样?
答案 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}}