我正在寻找一种方法来同步Linux上的多个多线程进程。C++11风格的互斥只在单个进程内的线程之间运行,据我所知,flock并不相互排除同一个进程的线程。
因此,我想到了POSIX信号量。我知道未命名的信号量要么与线程相关,要么与进程相关,但两者都不相关。那名字的信号灯呢?很明显,它们同步进程,但是线程呢?我在文件中找不到明确的答案。
发布于 2015-06-05 16:54:06
是的,它们同步线程。
开放组基础规范第7期在通用概念中阐明了所有信号量同步线程,无论它们是POSIX风格(<semaphore.h>)还是SysV风格(<sys/sem.h>):
信号量锁操作将导致调用线程被阻塞并添加到等待信号量的一组线程中。
关于你所说的“未命名的信号量是线程或进程相关的,但不是两者”,我不太明白你的意思。如果在共享内存和显式初始化为"pshared“中分配未命名的信号量,则可以在(父-子)进程之间共享未命名的信号量。但是,进程共享与否,未命名的信号量会同步单个线程。
(无论其价值如何,POSIX互斥对象也可以是在进程之间共享。)
https://stackoverflow.com/questions/30670120
复制相似问题