sem_init(...):值参数是什么?

Gab*_*air 9 multithreading semaphore

在一个类中,我们必须使用信号量来完成线程的工作.sem_init的原型(和头文件)如下:

int sem_init(sem_t*sem,int pshared,unsigned int value);

但我不明白值变量的用途.根据opengroup.org:

value是将信号量设置为的初始值

"价值是一种价值......"这有什么帮助,它用于什么?

小智 5

信号量值表示可在线程之间共享的公共资源的数量。如果该值大于 0,则调用 sem_wait 的线程不需要等待。它只是将值减 1 并继续访问公共资源。sem_post 会将资源添加回池中。所以它将值增加 1。如果值是 0,那么我们将等到有人完成了 sem_post。


小智 1

sem_init() 初始化一个指向信号量(第一个参数),并带有值(最后一个参数),最后我相信这实际上就是您所要求的, int pshared 您可以将其视为一个标志。如果 pshared == 1 那么信号量可以被分叉。

编辑:信号量具有 int 值,因为您将使用 sem_wait(sem_t* sem) 等函数来减少指向信号量的值。如果为负数,则阻止。