[英]can semaphores be used for two different applications accessing the same library
我有兩個不同的應用程序在Linux的共享庫中訪問相同的代碼。
情況1:-當第一個應用程序訪問庫中的代碼時,它將獲得鎖。 但是,當第二個應用程序訪問相同的代碼時,它將如何知道已經應用了鎖定,因為將為第二個應用程序創建另一個單獨的代碼副本。
Semaphore
是一個內核變量。
考慮信號量的一種有用方法是記錄特定資源有多少個單位,並結合操作以安全地(即,在沒有競爭條件的情況下)根據需要或釋放單位來調整該記錄,並在必要時進行調整,等到資源的一部分變為可用 鏈接
因此,當您鎖定semaphore
其值將為0(零),這表明其不可用。 因此,當其他進程由於鎖定而嘗試訪問該共享區域時,該共享區域將不可用。 並且當信號量解鎖時,該值將為1(one),這意味着它現在可用。
由於它是一個內核變量,我們將其用於同步
沒有任何方法可以訪問信號量的值,我們依靠信號量的不變量來定義其行為。
在基於Unix的系統上,代碼段(.text)不可更改,因此可以在多個進程之間共享。 共享庫的代碼由操作系統映射到內存中。
基本上,每個包含靜態數據(例如全局變量)的共享庫都有一個Global Offset Table GOT 。 在共享庫上,對靜態數據(全局)的所有引用都通過發生。 因此,即使代碼段在多個進程之間共享,每個進程也會對共享庫的其他段(包括其各自的全局偏移表)進行獨占映射,其條目會相應地重定位。 復雜度由CPU的內存管理單元解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.