对于共享内存,特别是在C语言中的mmap方面,我对多核和多CPU环境之间的实际问题有些困惑。
我有一个利用mmap在2个进程之间共享多个内存段的应用程序。每个进程都可以访问:
状态和控制内存段
原始数据(最多8个独立的原始数据缓冲区)
状态和控制段实际上用作IPC。即,它可以表示缓冲区1准备好接收数据,或者缓冲区3准备好处理,或者状态和控制内存段在被父级或子级等更新时被锁定。
我的理解是,如果我错了,请纠正我,是在单板PC类型基础架构上的多核CPU环境中,mmap是安全的。也就是说,无论CPU中有多少内核,RAM都只能在任何时候被单个内核(或进程)访问。
这种单进程RAM访问的假设是否也适用于多CPU系统?也就是说,一个具有多个CPU的PC样式板(我猜每个CPU内有多个内核)。
如果没有,我将需要认真考虑我的逻辑,以允许使用多CPU的单板机!
任何想法将不胜感激!
PS-单板是指一个独立的PC风格的系统。这不包括大型机之类...只是为了澄清:)
您的假设是完全错误的。 如果这是正确的,那么我们就不需要慢速指令,例如原子增量或原子比较交换,并且并发编程会容易得多(效率更低)。
RAM is only ever accessed by a single core (or process) at any one time.
退后一步,考虑一下您的假设手段。从理论上讲,是的,这句话是正确的,但我认为这并不意味着您所认为的意思。除了"如果两个CPU同时写入同一个地址,内存将不会着火",您没有其他可以得出的实际