簡體   English   中英

信號量可用於訪問同一庫的兩個不同應用程序

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

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