繁体   English   中英

如何保护两个进程之间共享 memory 中的字符串?

[英]How do I protect a character string in shared memory between two processes?

我有一块共享的 memory 包含一个字符字符串和一个 integer 在两个进程之间。

进程 A 写入它,进程 B 读取它(反之亦然)

确保进程 A 在进程 B 读取它的同时不会发生更新(写入)的最有效和最有效的方法是什么? (我是否应该只在共享 memory 中使用标志,使用信号量,临界区......)

如果你能指出我正确的方向,我将不胜感激。

谢谢。

Windows, C++

您不能使用临界区,因为它们只能用于同一进程内的线程之间的同步。 对于进程间同步,您需要使用MutexSemaphore 这两者的区别在于前者只允许单个线程拥有资源,而后者可以允许最大数量(在创建期间指定)同时拥有资源。

在您的情况下,互斥锁似乎合适。

由于您有两个进程,因此您需要跨进程同步 object。 我认为这意味着您需要使用mutex

互斥锁 object 有助于防止数据竞争,并允许线程之间的数据线程安全同步。 线程通过调用其中一个锁定函数获得互斥体 object 的所有权,并通过调用相应的解锁 function 放弃所有权。

如果您使用的是 boost 线程,则可以使用它的互斥锁和锁定,更多内容请参见下面的链接:

http://www.boost.org/doc/libs/1_47_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_types

由于您在谈论两个进程,因此系统范围的互斥锁将起作用,并且 Windows 拥有这些。 但是,它们不一定是最有效的方法。

如果您可以在共享 memory 中放入更多内容,那么通过 memory 中的标志的原子操作传递数据应该是最有效的做法。 例如,您可以使用Interlocked 函数来实现Dekker 算法(您可能希望使用YieldProcessor()类的东西来避免忙于等待)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM