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

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

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

但我不明白什么值变量用于。 根据opengroup.org:

值是设置信号量的初始值

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


sem_init()初始化一个指向信号量(第一个参数)和值(最后一个参数),最后我相信这实际上就是你所问的,int pshared你可以像一个标志那样想。 如果pshared == 1,则可以分叉信号量。

编辑:信号量有int值,因为你会使用一个函数,如sem_wait(sem_t * sem)减少指向信号量。 如果它是负面的,然后阻止。


为了理解sem_init中的“值”(sem_t * sem,int pshared,unsigned int值)

我认为我们需要将它与我们在代码中如何使用信号量进行同步:当我们想等待信号量时,我们调用sem_wait(&mutex),如果我们想通知让其他线程的sem_wait(&mutex)运行,我们需要调用sem_post(&mutex)。 但问题是,如果没有任何其他线程首先调用sem_post(&mutex)(在系统初始化中),那么sem_wait(&mutex)应该做什么? 它应该通过或等待其他线程调用sem_post(&mutex)? 答案是在sem_init()中的“value”中。 如果它为零,这意味着我们必须等待其他线程调用sem_post()一次,然后才能通过。 如果是1,那么第一次调用sem_wait()会立即传递,但第二次sem_wait()会等待(如果在它们之间没有调用sem_post)。 所以sem_init()中的值意味着我们可以在没有任何sem_post()的情况下执行sem_wait()而无需等待多少次。 我们可以将sem_wait()看作:/死锁等待,直到值被另一个线程改变为大于0 /

while(value <= 0){}

值 - ;

并考虑sem_post()为:

值++;


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

链接地址: http://www.djcxy.com/p/57647.html

上一篇: init(…): What is the value parameter for?

下一篇: Implementing Testflight.com and Flurry.com exception handling