簡體   English   中英

鎖定兩個進程而不是線程的自由/原子操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM