【发布时间】:2020-10-18 03:59:24
【问题描述】:
是否有针对 POSIX 共享内存(跨进程)的内存模型规范?
我希望有一些可以与 C++ 内存模型相媲美的东西,以便回答如下问题:
- 是否有数据竞争的定义?
- 数据竞争是否有未定义的行为(如在 C++ 中)?
- 有什么东西可以限制跨进程的内存可见性顺序吗?我知道 pthread_mutex 可以放在共享内存中并由多个进程使用,但这会导致发生在关系之前吗?
- 内存屏障会起作用吗?
【问题讨论】:
-
所以,因为 POSIX 标准是免费在线提供的,所以您确实做了自己的研究。那么你发现了什么?
-
我不明白最后两点。
Is there something to constrain memory visibility order across processes?有没有什么东西可以让你从其他进程中读取内存?我不明白 - 你对“约束”这个词到底有什么想法?but does that induce a happens before relation?你还怎么使用那个互斥锁?Do memory barriers play a roll?究竟是什么?内存屏障是特定的 cpu 指令,我不希望 POSIX 了解任何硬件特定的细节。 -
在 Linux 上,POSIX posix 共享内存只是同一物理内存的映射,与两个线程的整个地址空间的情况完全相同,因此将应用相同的内存语义。
-
@KamilCuk 回复:“我不明白——你对“约束”这个词到底有什么想法?” C++ 内存模型 (en.cppreference.com/w/cpp/atomic/memory_order) 声明“在多核系统上没有任何约束,当多个线程同时读取和写入多个变量时,一个线程可以观察到值的变化顺序与另一个线程写入它们的顺序不同。”然后它描述了可以添加到程序中的约束,以确保线程以特定顺序看到内存更改。进程之间是否有类似的内存共享机制?
标签: c++ linux posix shared-memory