[英]lock freedom/atomic operations across 2 processes instead of threads
我通过使用共享内存在多个进程之间共享一些数据; 我使用进程间互斥来实现同步。
我的问题如下:是否可以使用无锁数据结构和/或原子操作来实现更快的同步,而无需在两个进程之间使用互斥锁?
如果不是,你知道这是什么主要原因?
它们仅用于同步同一进程的线程。 这些概念是否也可以移植到流程中? 如果不是,您是否知道跨进程共享/同步数据的更快方法?
这些概念是否也可以移植到流程中?
是的,原子操作对于线程和进程都是通用的,IIF原子使用的内存是共享的。
原子操作是处理器本身的特定指令,并且对线程或进程一无所知,它只是动作(读取;比较;存储)的全有或全无(不可分割)复杂与低级硬件实现。
因此,您可以在进程之间设置共享内存并将atomic_t放入其中。
无锁
是的,如果只使用原子实现无锁。 (这应该)
数据结构
您应该检查,当共享内存用于存储指针时(在数据结构中),共享内存将映射到两个进程中的相同地址。
如果内存将映射到不同的地址,则指针将在另一个进程中被中断。 在这种情况下,您需要使用相对地址,并进行简单的内存转换。
进程间互斥
我应该说glibc> 2.4(NPTL)使用futex结合原子操作进行非竞争锁定(对于Process共享互斥锁=进程间互斥锁)。 因此,您已经在共享内存中使用原子操作。
在带有NPTL的x86上,大多数同步原语的快速路径只有一个带有完整内存屏障的互锁操作。 由于x86平台没有比这更轻的东西,它们已经是你能做的最好的了。 除非现有的原子操作完全按照您的需要进行操作,否则将无法提高性能,以降低使用语义较轻的原语的成本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.