锁定两个进程而不是线程的自由/原子操作

Abr*_*ile 8 c++ linux ipc lock-free interprocess

我通过使用共享内存在多​​个进程之间共享一些数据; 我使用进程间互斥来实现同步.

我的问题如下:是否可以使用无锁数据结构和/或原子操作来实现更快的同步,而无需在两个进程之间使用互斥锁?

如果不是,你知道这是什么主要原因?

它们仅用于同步同一进程的线程.这些概念是否也可以移植到流程中?如果不是,您是否知道跨进程共享/同步数据的更快方法?

osg*_*sgx 9

这些概念是否也可以移植到流程中?

是的,原子操作对于线程和进程都是通用的,IIF原子使用的内存是共享的.

原子操作是处理器本身的特定的指令,并在一无所知的线程或进程,它只是所有有或全无(不可分割的)行动的复杂与低级别的硬件实现(读;商店;比较).

因此,您可以在进程之间设置共享内存并将atomic_t放入其中.

无锁

是的,如果只使用原子实现无锁.(这应该)

数据结构

您应该检查,当共享内存用于存储指针时(在数据结构中),共享内存将映射到两个进程中的相同地址.

如果内存将映射到不同的地址,则指针将在另一个进程中被中断.在这种情况下,您需要使用相对地址,并进行简单的内存转换.

进程间互斥

我应该说glibc> 2.4(NPTL)使用futex结合原子操作进行非竞争锁定(对于Process共享互斥锁=进程间互斥锁).因此,您已经在共享内存中使用原子操作.

  • 嗯,[__sync 是遗留的](http://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html) 和 [__atomic 应该使用](http://gcc.gnu.org/onlinedocs/gcc/ _005f_005fatomic-Builtins.html) (2认同)