linux 訊號量(程序間通訊)

2021-06-27 00:10:33 字數 1089 閱讀 4680

將使用乙個程式來演示訊號量的使用,程式用pv操作控制訊號量,以操作臨界區,p操作讓訊號量減1,v操作讓訊號量加1,而pv操作之間的**即為臨界區關鍵**。每次只能由乙個程序訪問。

程式建立出乙個子程序,在兩個程序中分別有一段臨界區關鍵**,實現的功能都是不斷的順序輸出0~9的字元。

保證程序間同步

[plain]view plain

copy

print?

#include 

#include 

#include 

#include 

#include 

#include 

static int init_semvalue (int);  

static void del_semvalue (int);  

static int p (int);  

static int v (int);  

//自己定義的semun結構體  

union semun  

;  int  

main (int argc, char *argv)  

//建立子程序  

if ((pid = fork ()) == 0) //子程序  

if (!v (sem_id))//釋放資源  

exit (exit_failure);  

}  }  

else if (pid > 0)      //父程序  

if (!v (sem_id))  

exit (exit_failure);  

}  sleep (8);  

//銷毀訊號量  

del_semvalue (sem_id);  

}  exit (exit_success);  

}  static int  

init_semvalue (int id)  

static void  

del_semvalue (int id)  

int  

p (int id)  

int  

v (int id)   

linux 程序間通訊 訊號量

例項中首先使用fork 建立乙個子程序,在父程序呼叫kill 之前,在子程序中使用raise 向自身傳送sigstop訊號,是子程序暫停。接下來使用kill 向子程序傳送訊號 ngnsvr9 none home xionghailong example cat kill raise.c includ...

Linux 程序間通訊 訊號量

linux學習目錄 1 什麼是訊號量?在對於臨界區資源管理過程中,為了防止多個程式同時訪問乙個共享資源而引發的一系列問題。比如 死鎖。為了解決這種問題,巨人們就發明了訊號量。訊號量就是為了解決在乙個臨界區只有乙個程序訪問它,也就是說訊號量相當於交警,來協調程序對共享資源有序的訪問而不造成死鎖等行為。...

Linux程序間通訊 訊號量

此處只涉及利用 二進位制訊號量 只用0和1 完成 控制線程順序 為中心的同步方法。訊號量的建立和銷毀函式 pshared引數超出我們關注的範圍,預設向其傳遞0.訊號量相當於互斥量lock,unlock的函式 呼叫sem init函式時,作業系統將建立訊號量物件,此物件中記錄著 訊號量值 整數。該值在...