Multithreading sem_init(…;):值参数是什么?

Multithreading sem_init(…;):值参数是什么?,multithreading,semaphore,Multithreading,Semaphore,在一个类中,我们必须使用信号量来完成与线程的工作。 sem_init的原型(和头文件)如下所示: int sem_init(sem_t*sem,int pshared,unsigned int value) 但是我不明白这个值变量是用来做什么的。根据opengroup.org: 值是将信号量设置为的初始值 “value是一个值…”这有什么帮助,它是用来做什么的?sem_init()初始化一个指向信号量(第一个参数),使用value(最后一个参数),最后我相信这就是你要问的,int pshared

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

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

但是我不明白这个值变量是用来做什么的。根据opengroup.org:

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

“value是一个值…”这有什么帮助,它是用来做什么的?

sem_init()初始化一个指向信号量(第一个参数),使用value(最后一个参数),最后我相信这就是你要问的,int pshared你可以想象成一个标志。如果pshared==1,则可以分叉信号量


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

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

我认为我们需要将它与我们在代码中使用信号量的方式同步: 当我们想要等待信号量时,我们调用sem_wait(&mutex),如果我们想要通知其他线程的sem_wait(&mutex)运行,我们需要调用sem_post(&mutex)。 但问题是,如果没有任何其他线程首先(在系统初始化中)调用sem_post(&mutex),sem_wait(&mutex)应该做什么?它应该传递或等待其他线程调用sem\u post(&mutex)? 答案在sem_init()中的“值”中。如果它是零,这意味着我们必须等待其他线程调用sem_post()一次,然后它就可以通过。如果是1,则第一次调用sem_wait()将立即通过,但第二次调用sem_wait()将等待(如果在调用过程中没有调用sem_post)。 因此,sem_init()中的值表示在没有任何sem_post()的情况下,我们可以执行多少次sem_wait(),而不需要真正等待。 我们可以考虑SmithWaIT(): /死锁等待,直到另一个线程将值更改为大于0/


当(valueSemaphore value表示线程之间可共享的公共资源的数量。如果该值大于0,则调用sem_wait的线程不需要等待。它只需将该值减1,然后继续访问公共资源。sem_post会将资源添加回池中。因此,它将该值增加1。如果值为0,然后我们将等待,直到有人完成sem_post。

它是什么意思“有值”?它是指它被锁定/解锁吗?它是否指定了可能获取信号量的数量?我相信它是这个初始值:“sem_wait()递减(锁定)sem指向的信号量。如果信号量的值大于零,则减量进行,函数立即返回。如果信号量当前的值为零,则调用将阻塞,直到可以执行减量为止(即,信号量值上升到零以上),或信号处理程序中断调用。“