Fra*_*k V 11 multithreading semaphore
在研究生班,我们必须使用信号量来完成线程的工作.
我们被指示sem_init与一堆其他sem_*程序一起使用,但我们没有提供关于每个sem_*方法的详细信息.
原型(和头文件)的sem_init是以下:
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
Run Code Online (Sandbox Code Playgroud)
但我不明白pshared值是用来做什么的.根据opengroup.org:
如果
pshared参数具有非零值,则信号量在进程之间共享; 在这种情况下,任何可以访问信号量的进程都sem可以sem用于执行sem_wait(),sem_trywait()和sem_post(),以及sem_destroy()操作.
但我想我不明白说1,2,10,25,50000等之间的区别.我认为如果值为0那么信号量就不会被共享.(但那么,重点是什么?)
如何正确使用此pshared参数?
qua*_*ark 13
GLIBC版本sem_init(如果您man sem_init在Linux上获得的话)有这样的说法:
"pshared参数指示是否要在进程的线程之间或进程之间共享此信号量."
所以pshared是一个布尔值:在实践中传递给它的有意义的值是false(0)和true(1),尽管任何非0值都将被视为true.如果你传递它0,你将获得一个信号量,可以被同一进程中的其他线程访问 - 实质上是进程内锁.您可以将其用作互斥锁,或者您可以更普遍地将其用于信号量的资源计数属性.可以说,如果pthreads支持信号量API,你就不需要这个功能了sem_init,但Unix中的信号量在pthreads之前会花费相当多的时间.
如果布尔值是某种枚举(例如SEM_PROCESS_PRIVATEvs SEM_PROCESS_SHARED)会更好,因为那样你就不会有这个问题,但POSIX信号量是一个相当古老的API.
| 归档时间: |
|
| 查看次数: |
13981 次 |
| 最近记录: |