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