【发布时间】:2020-09-14 14:34:19
【问题描述】:
我需要使用命名信号量在线程之间共享资源。我有一个主线程和 X 个子线程。
我是否必须在主线程中使用sem_open 和O_CREAT 标志,然后在每个子线程中再次调用sem_open,名称相同但没有标志?
还是我只需要在我的主线程中调用一次sem_open,然后在所有子线程中使用它的返回值?
我都尝试了,但没有得到任何接近预期的行为...
【问题讨论】:
-
您可以使用未命名的信号量,它们只是在线程之间共享;见
sem_init。 -
我知道我应该使用它们,但这是一个学校项目,必须使用命名信号量
-
后者,但仅仅知道这对您没有帮助。请告诉我们您遇到的问题的minimal reproducible example。
-
命名信号量的正常用例将在不同的进程之间。在这种情况下,每个进程将独立打开信号量,并且每个进程都有自己的单独句柄。您确定讲师希望您在单个进程中使用多个线程吗?
-
我们必须执行两次相同的程序,一次使用不同的进程,另一次在同一进程中但使用不同的线程。我们必须对它们都使用命名信号量
标签: c multithreading semaphore