c++ semaphore信号量的使用

c++ semaphore信号量的使用,第1张

目前网上可以查找到很多关于信号量的实现文章,但是讲解在linux下使用semaphore的文章比较少;

c++ linux semaphore信号量的使用

sem_init函数是Posix信号量操作中的函数。sem_init() 初始化一个定位在 sem 的匿名信号量。value 参数指定信号量的初始值。 pshared 参数指明信号量是由进程线程共享,还是由进程之间共享。如果 pshared 的值为 0,那么信号量将被进程内的线程共享,并且应该放置在这个进程的所有线程都可见的地址上(如全局变量,或者堆上动态分配的变量)。

如果 pshared 是非零值,那么信号量将在进程之间共享,并且应该定位共享内存区域(见 shm_open(3)、mmap(2) 和 shmget(2))。因为通过 fork(2) 创建的孩子继承其父亲的内存映射,因此它也可以见到这个信号量。所有可以访问共享内存区域的进程都可以用 sem_post(3)、sem_wait(3) 等等操作信号量。初始化一个已经初始的信号量其结果未定义。

返回值 :

sem_init() 成功时返回 0;错误时,返回 -1,并把 errno 设置为合适的值。

例子:

一个是Posix实现,一个是System V实现

使用的环境不一样

一般来讲SV的适用于进程同步,POSIX适用于线程同步

System V进程同步 api:semget/semop/semctl

POSIX 线程同步 api:sem_init/sem_destroy

不过POSIX貌似还会分为有名和无名信号量上面说的是无名信号量。

具体的还要看使用的环境。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/482365.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-09
下一篇2023-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存