Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获得全局互斥?_C++_Multithreading_Memory_Ipc_Shared Memory - Fatal编程技术网

C++ 如何获得全局互斥?

C++ 如何获得全局互斥?,c++,multithreading,memory,ipc,shared-memory,C++,Multithreading,Memory,Ipc,Shared Memory,我试图以分布式方式生成共享内存;我还需要跨平台的解决方案。为了做到这一点,我需要使用互斥锁同步这个共享内存的初始化 因此,这个互斥体需要共享 我看了一下这个问题: 但是,它建议将互斥锁放在由中央进程生成的共享内存中。这与我想做的恰恰相反。如果我有这个中央进程(他们称之为父进程),我可以简单地初始化其中的共享内存 还有一个问题:,然而,答案不是跨平台的 我正在努力实现: try { getMutex(ID); // I was first } catch { // s

我试图以分布式方式生成共享内存;我还需要跨平台的解决方案。为了做到这一点,我需要使用互斥锁同步这个共享内存的初始化

因此,这个互斥体需要共享

我看了一下这个问题:

但是,它建议将互斥锁放在由中央进程生成的共享内存中。这与我想做的恰恰相反。如果我有这个中央进程(他们称之为
父进程
),我可以简单地初始化其中的共享内存

还有一个问题:,然而,答案不是跨平台的

我正在努力实现:

try {
    getMutex(ID); 
    // I was first 
} catch
{ 
    // someone else has mutex 
}

这可能吗?

如何跨平台?(有一些非常奇怪的平台!)您使用什么API来获取跨平台的共享内存?谁拥有共享内存,它的身份是如何共享的?@Yakk AdamNevraumont现在我正在使用boost库,但如果有更好的解决方案,我不介意改变。为了兼容性,我认为主要的3个版本,Windows,Mac和Linux,就足够了。而且,就互斥锁的所有权而言,它是由第一个锁定它的人拥有的。请澄清“分布式共享内存”。通常共享内存位于一个位置,以便两个或多个实体可以访问它。如果内存是分布式的,实体可能不知道它在哪里。此外,在所有内存之间拥有共享内存集群是操作系统管理的一大难题;大多数操作系统都为所有共享内存分配了一个区域。只需考虑管理与进程内存位置交织在一起的共享内存。讨厌。@ThomasMatthews我实际上是在尝试实现一个共享的、分布式的、并发的链表。我使用链表是为了避免复制整个列表,当容量达到时,请澄清“分布式链表”。我的图片是节点分散在内存中(甚至可能跨平台)。这就是“分布式”对我的意义。或者你的意思是有些流程在列表中有一些节点,而其他流程有其他节点。如何跨平台?(有一些非常奇怪的平台!)您使用什么API来获取跨平台的共享内存?谁拥有共享内存,它的身份是如何共享的?@Yakk AdamNevraumont现在我正在使用boost库,但如果有更好的解决方案,我不介意改变。为了兼容性,我认为主要的3个版本,Windows,Mac和Linux,就足够了。而且,就互斥锁的所有权而言,它是由第一个锁定它的人拥有的。请澄清“分布式共享内存”。通常共享内存位于一个位置,以便两个或多个实体可以访问它。如果内存是分布式的,实体可能不知道它在哪里。此外,在所有内存之间拥有共享内存集群是操作系统管理的一大难题;大多数操作系统都为所有共享内存分配了一个区域。只需考虑管理与进程内存位置交织在一起的共享内存。讨厌。@ThomasMatthews我实际上是在尝试实现一个共享的、分布式的、并发的链表。我使用链表是为了避免复制整个列表,当容量达到时,请澄清“分布式链表”。我的图片是节点分散在内存中(甚至可能跨平台)。这就是“分布式”对我的意义。或者,您的意思是,某些进程在列表中有一些节点,而其他进程则有其他节点。