-
在本文中,我們將研究程序間通訊的另一種機制——訊號量。 注意不要將其與前面提到的訊號混淆,這是兩回事。 有關訊號的更多資訊,您可以閱讀我的另一篇文章:
Linux 程序間通訊 - 使用訊號。 讓我們來解釋一下訊號量。
1. 什麼是訊號量?
為了防止多個程式同時訪問乙個共享資源而導致的一連串問題,我們需要一種方法來生成和使用令牌來授權乙個關鍵區域,在該區域中,任何時候只有乙個執行執行緒可以訪問**。 乙個關鍵領域是何時需要以獨佔方式執行資料更新。 訊號量可以提供一種訪問機制,一次只允許乙個執行緒訪問關鍵區域,即訊號量用於協調程序對共享資源的訪問。
訊號量是程式訪問原子操作的特殊變數,只允許它等待(即 p(訊號變數))和傳送(即 v(訊號變數))資訊操作。 最簡單的訊號量是只能取 0 和 1 的變數,這也是最常見的訊號量形式,稱為二進位訊號量。 然而,可以接受多個正整數的訊號量稱為通用訊號量。
這裡主要討論二進位訊號量。
二、訊號量的工作原理。
由於訊號量只能做兩件事,等待和傳送訊號,即 p(sv) 和 v(sv),它們的行為如下:
p(sv):如果 sv 的值大於零,則從中減去 1; 如果值為零,則暫停程序的執行。
v(sv):如果有其他程序因等待 sv 而暫停,則讓它恢復執行,如果沒有程序因等待 sv 而暫停,則向其新增 1
例如,兩個程序共享乙個訊號量 sv,一旦其中乙個程序執行 p(sv) 操作,它將獲得訊號量並可以進入臨界區域,將 sv 減去 1。 第二個程序將被阻止進入臨界區域,因為當它嘗試執行 p(sv) 時,sv 為 0,並且它將被暫停以等待第乙個程序離開臨界區並執行 v(sv) 以釋放訊號量,此時第二個程序可以恢復執行。
3. Linux 的訊號量機制。
Linux 提供了一組精心設計的訊號量介面來操作訊號,而不僅僅是用於二進位訊號量,如下所述,但請注意,這些函式用於操作訊號量值組。 它們在標頭檔案 sys 中宣告。
-
SEM INIT:初始化訊號量 SEM T,它允許您指定訊號量的初始值以及是否可以在多個程序之間共享。 sem_wait:
阻止並等待訊號量為 0。 sem timedwait:阻塞並等待一定時間,直到訊號量為 0。
sem post:使訊號量增加 1。 sem_destroy:
釋放訊號量...
-
可以通過指令查詢當前程序開啟了多少控制代碼,Linux下有乙個exec函式族可以執行指令,只需將指令寫入即可。
檢視當前程序開啟了多少個控制代碼。
# lsof -n|awk ''|sort|uniq -c|sort -nr|more
根據 ID 號檢視程序名稱。
# ps aef|GREP ID 號。
-
一般來說,對於單個程序,檔案控制代碼(包括套接字套接字)的最大數量為 1024,這是預設值,可以使用 ulimit 進行修改。 我不知道你是否在問。
-
我將以監視程序為例:“vmstat”命令的程序。 #
bin/bashpross=`ps-el|grepvmstat|awk''`stat=`ps-el|grepvmstat|awk''`pid=`ps-el|grepvmstat|awk''`if[$pross]thenif[$stat="z"]thenecho"$prosshasdead"echo"now,killingit"kill-9$pidecho"now,restart"vmstat25>>>/tmp/
-
去 proc 看看,根據狀態,根據 pid,然後去找名字。 你可以的。
-
我敢想,我只能說你異想天開。
-
Linux 中有不止乙個桌面環境,你說的是哪乙個,Ubuntu?
-
命令 ipcs -s 顯示有關系統中存在的訊號量組的資訊。 另一方面,ipcrm sem 命令可以從命令列中刪除訊號量組。 例如,若要刪除識別符號為 5790517 的訊號量組,應執行以下命令:
ipcrm sem 5790517
-
Linux 中的程序之間有三種同步機制:
訊號量記錄鎖(檔案鎖)。
共享記憶體中的互斥鎖
效率:共享記憶體、互斥>訊號量>記錄鎖定 posix 提供了一種新的訊號量 - 稱為訊號量,它既可以用作程序和執行緒之間同步的手段。 它比共享記憶體互斥鎖更有效。
-
分配和初始化訊號量是兩個獨立的操作。 使用 0 作為第二個引數呼叫 semctl,將 setall 作為第三個引數來初始化訊號量組。 第四個引數是乙個 semun 物件,其陣列字段指向乙個無符號的短陣列。
陣列中的每個值都用於初始化組中的乙個訊號量。
** 顯示了初始化二進位訊號量的功能。
(SEM 初始化二進位訊號量。
#include
#include
#include
我們必須自己定義 Union Semun。 */union semun
* 將二進位訊號量初始化為 1。 */int binary_semaphore_initialize (int semid)
您好,我是前移動網路投訴處理員,希望我能對您有所幫助! 手機訊號的質量取決於基站覆蓋範圍內載波頻率的頻率值,一般手機的訊號在-30db和-91db之間是滿的,-92db和-97db之間是4格訊號,-98db和-103db之間是3格訊號,然後下去打電話就會成為問題, 沒有專業的軟體,一般人只能看手機訊號是否滿,才能看手機訊號是好是壞。您想從以下 4 個方面測試您的手機: >>>More
根據您的描述; 您可以撥打10,000到人工服務進行相應的業務諮詢。 一般業務建議您登入安徽電信線上營業廳進行查詢,安徽電信線上營業廳銷售各種電子產品,您可以登入安徽電信線上營業廳進行詳細的猜測查詢。 >>>More
你只能在你填寫的志願者**上勾選,其他的**也與過去有關。 進入網頁後,找到入學查詢欄並輸入。 如果您沒有此字段或無法訪問或沒有您的號碼,則尚未正式宣布(審核中)。 >>>More
尊敬的使用者,您好! 很高興為您解答問題,您的電信手機號碼需要查詢流量支出,您的電信手機可以直接登入電信手持營業廳進入**使用查詢部分,可以查詢手機流量的使用情況和剩餘量。 >>>More