我正在审查一些代码并对所使用的技术感到怀疑。
在 linux 环境中,有两个进程附加多个共享内存段。第一个进程定期加载一组要共享的新文件,并将共享内存 id (shmid) 写入“主”共享内存段中的某个位置。第二个进程不断读取这个“主”位置并使用 shmid 附加其他共享段。
在多 CPU 主机上,在我看来,如果一个进程在另一个进程正在写入内存时尝试读取内存会发生什么,这可能取决于实现。但也许硬件级总线锁定可以防止电线上的位错位?读取过程是否获得了一个很快就会改变的值并不重要,只有读取被破坏为既不是旧值也不是新值的东西才重要。这是一个边缘情况:只有 32 位被写入和读取。
谷歌搜索 shmat 的东西并没有让我在这个领域找到任何确定的东西。
我强烈怀疑它不安全或不理智,我真正想要的是一些详细描述问题的文章的指针。