2014-05-19 48 views
1

我有兩種不同的應用程序訪問Linux中共享庫中的相同代碼。可以將信號量用於訪問相同庫的兩種不同應用程序

Case1: - 當第一次應用程序訪問庫中的代碼時,它獲取鎖。但是當第二個應用程序訪問相同的代碼時,它如何知道已經應用了鎖定,因爲將爲第二個應用程序創建另一個單獨的代碼副本。

回答

2

Semaphore是一個內核變量。

一個有用的方式來思考一個信號量是作爲一個特定的資源有多少單位可用的記錄,再加上操作安全(即沒有競爭條件)調整該記錄,因爲單位是必需的或變得自由以及,如果必要的話,等到資源的單位變爲可用link

所以當你鎖定semaphore其值爲0(零)現在顯示出其不可用。所以當其他進程試圖通過鎖定訪問共享區域時,共享區域將不可用。當信號量解鎖時,值將是1(一),這意味着現在它可用。

因爲它的一個核心變量,我們用它來同步

有訪問信號的,我們依靠Semaphore的不變來定義其行爲的價值沒有方法。

在基於Unix的系統上,代碼段(.text)可能會在多個進程之間共享,因爲它是不可變的。操作系統將共享庫的代碼映射到內存中。

基本上,包含靜態數據(例如全局變量)每個共享庫具有全局偏移表GOT。在共享庫上,所有對靜態數據(全局)的引用都通過。因此,即使該代碼段在多個進程之間共享,每個進程具有其共享庫的其他片段,包括相應的全局偏移表,其條目被相應地重定位的映射獨佔。 CPU的內存管理單元解決了複雜問題。

你可以通過這個鏈接Dynamic Linking and Loadingmemory management

+0

當兩個不同的應用程序訪問庫中相同的代碼,並操作系統創建的代碼的單獨副本? – mujtaba

+0

我更新了答案,這可能會清除您的疑問。 – Rocoder

相關問題