我正在寻找一种在Linux上同步多个多线程进程的方法。 C ++ 11风格的互斥锁只能在单个进程中的线程之间运行, 据我所知,flock并没有相互排除同一进程的线程。
因此,我在考虑POSIX信号量。 我知道未命名的信号量与线程或进程相关,但不是两者兼而有之。 命名信号量怎么样?显然他们同步进程,但线程呢?我在文档中找不到明确的确定答案。
答案 0 :(得分:1)
是的,他们会同步线程。
Open Group Base Specification Issue 7在一般概念下澄清了所有semaphores synchronize threads,无论它们是POSIX风格(<semaphore.h>
)还是SysV风格({{1 }}):
[T]信号量锁定操作将导致调用线程被阻塞并添加到等待信号量的线程集
关于“未命名的信号量与线程或进程相关,但不是两者都是的说法,我不太清楚你的意思。如果在共享内存和explicitly initialized as "pshared"中分配,未命名的信号量可以在(父子)进程之间共享。但是,进程共享与否,未命名的信号量会同步各个线程。
(对于它的价值,POSIX互斥量也可以be shared between processes。)