麻烦理解命名信号量初始化

问题描述

@H_404_0@我需要使用命名信号量在线程之间共享资源。我有一个主线程和X个子线程。

@H_404_0@我是否必须在主线程中使用带有sem_open标志的O_CREAT,然后在每个具有相同名称但没有标志的子线程中再次调用sem_open

@H_404_0@还是我只需要在主线程中调用一次sem_open,然后在所有子线程中使用它的返回值?

@H_404_0@我都尝试了两次,但没有得到任何与预期行为相似的东西...

解决方法

打开信号量后,必须在线程中使用等待和信号功能:

sem_open(3)函数创建一个新的命名信号量或 打开一个现有的命名信号量。信号量后 已打开,可以使用sem_post(3)和 sem_wait(3)。当使用信号灯完成处理后, 它可以使用sem_close(3)关闭信号量。当全部 信号灯已完成处理,可以将其删除 从系统使用sem_unlink(3)。

参考:sem_overview(7) — Linux manual page