微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

控制进程内存储的顺序

如何解决控制进程内存储的顺序

我正在尝试使用共享内存中的缓冲区解决发布者订阅者问题。我的发布者使用 C++ 中的 memcpy() 从一个偏移量(从缓冲区的开始)在缓冲区中写入一条消息,在它写入消息后,它将这个偏移量存储在共享内存的另一个段中,在那里它写了最后一条消息。订阅者使用此偏移量来确定发布者成功写入最后一条消息的位置。问题是我需要控制存储顺序,即发布者首先将消息成功存储在缓冲区中,然后更新其偏移量。同样,在订阅者方面,我需要消费者首先成功读取一条消息,然后更新有关他们刚刚读取最后一条消息的位置的信息。我可以想到在这里使用内存屏障,但无法实现。

解决方法

我认为您将内存屏障与锁混淆了。通常生产者/消费者模式是使用某种形式的锁定来实现的。

当您有多个进程时,通常也会使用术语“共享内存”,因为所有内存都在同一个进程中“共享”。

您可以在此处找到有关该模式的更多信息:https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem 以及有关不同类型锁定之间差异的更多信息在这里: difference between lock,memory barrier,semaphore

这是一个复杂的问题,需要经验才能正确解决。如果您想学习,请继续进行实施,但请注意,它不会很快投入生产。例如,使用 std::memcpy 复制数据非常限制您生成/使用的数据类型,因为大多数 C++ 类型不能仅使用 std::memcpy 复制。要知道使用 std::memcpy 复制类型是否安全,您可以使用 https://en.cppreference.com/w/cpp/types/is_trivially_copyable

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。