C ++ / Linux系统范围的全局variables/信号量/互斥量?

是否有可能在Linux上用C ++创build一个系统范围的全局variables/信号/互斥锁?

原因如下:我有一个系统经常在不相关的数据上运行同一软件的多个副本。 通常有4个工作,每个工作都运行相同的软件。 该软件有一个小部分,它创build一个巨大的graphics,需要大量的内存; 该部分以外的内存使用量适中。

有时候有两个工作同时碰到同样需要记忆的部分,整个系统开始交换。 因此,我们希望通过在不同的作业之间创build像临界区互斥这样的东西来防止这种情况发生,因此一次只能分配大量的内存。

如果这些线程是同一个线程,pthread锁就可以完成这个工作。

在不同的工作之间实现这种互斥有什么好方法?

如果您可以使所有进程达成共同的名称,则可以使用已命名的信号量 。

一个命名的信号量由一个/somename形式的名字来/somename ; 即由NAME_MAX-4(即251个)字符组成的以空字符结尾的字符串,后者是一个或多个字符,其中没有一个是斜杠。 两个进程可以通过将相同的名称传递给sem_open(3)来对同一个已命名的信号量进行操作

对于进程间互斥,可以使用文件锁定。 使用linux,代码就像通过调用flock来保护临界区一样简单。

 int fd_lock = open(LOCK_FILE, O_CREAT); flock(fd_lock, LOCK_EX); // do stuff flock(fd_lock, LOCK_UN); 

如果您需要POSIX兼容性,则可以使用fcntl

互斥锁(互斥锁)可以防止多线程同时执行访问共享数据的关键代码段(即互斥量用于序列化线程的执行)。 所有的互斥锁都必须是全局的。 通过mutex_lock()成功调用互斥锁将导致另一个线程也试图锁定相同的互斥锁,直到所有者线程通过mutex_unlock()解锁为止。 相同进程或其他进程中的线程可以共享互斥。

互斥锁可以在同一进程其他进程中同步线程。 如果互斥量分配在可写内存中并且在协作进程之间共享(参见mmap(2)),并且已经为此任务初始化,则可以使用互斥锁来同步进程之间的线程。

对于进程间同步,需要在这些进程共享的内存中分配一个互斥量。 由于这种互斥体的内存必须动态分配,互斥体需要使用mutex_init()进行显式初始化。 另外,对于进程间同步,除了需要在共享内存中分配,互斥体还必须使用属性PTHREAD_PROCESS_SHARED,否则从另一个进程访问互斥量比创建者导致未定义的行为(参见:linux.die.net / man / 3 / pthread_mutexattr_setpshared):“进程共享属性被设置为PTHREAD_PROCESS_SHARED,以允许任何线程访问互斥量被分配的内存,即使互斥量分配在内存中由多个进程共享