在Linux上,我使用
我将共享内存段布置如下:
这个过程能够确保如果读者认为数据有效,则实际上它就是有效的吗?
我需要担心乱序执行(OOE)吗?如果需要,那么读者使用
shmget
和shmat
来设置一个共享内存段,其中一个进程将写入数据,而一个或多个进程将从中读取。被共享的数据大小为几兆字节,当更新时会完全重写;它永远不会部分更新。我将共享内存段布置如下:
------------------------- | t0 | 实际数据 | t1 | -------------------------其中t0和t1是写入者开始更新时的时间副本(具有足够的精度,以确保后续更新具有不同的时间)。写入者首先写入t1,然后复制数据,最后写入t0。另一方面,读者首先读取t0,然后读取数据,最后读取t1。如果读者得到的t0和t1的值相同,则认为数据一致且有效;否则,它将再次尝试。
这个过程能够确保如果读者认为数据有效,则实际上它就是有效的吗?
我需要担心乱序执行(OOE)吗?如果需要,那么读者使用
memcpy
来获取整个共享内存段是否能够解决读者端的OOE问题?(这假定memcpy
通过地址空间线性升序执行其复制。这个假设是有效的吗?)