關於訊號量的一些使用

2021-08-18 04:49:21 字數 1765 閱讀 2358

一.編寫一些關於訊號量的** 1.

用signal

實現sleep

(): (1

)**:

# include

# include

# include

typedef void (*handler)(int sig);

void myhandler(int sig)

int mysleep(int second)

int main() (

2)makefile

中的**:

3)實現結果:

實現volatile (

中的**:

3)實現結果:

用sigsuspend

重寫mysleep (

中的**:

3)實現結果:

編寫程式使其不會產生殭屍程序 (

1)**: 法

1:# include

# include

# include

typedef void (*handler)(int sig);

void myhandler(int sig)

int main()

}else if(ret==0)

else }

法2:若出現多個子程序,同時撤銷會出現問題(還剩很多程序不能被**)(

wait<

程序數)

# include

# include

# include

typedef void (*handler)(int sig);

void myhandler(int sig)

printf("wait=%d\n",wait); }

}int main()

}else if(ret==0)

else }

法3:int main()

}else if(ret==0)

else }

二.一些總結:

1.pause

函式使呼叫程序掛起直到有訊號遞達。 2.

對於程式中存在多個執行流程訪問同一全域性變數的情況,

volatile

限定符是必要的,此外,雖然程式只有單一的執行流程,但是變數屬於以下情況的,也需要

volatile

限定:(

1)變數的記憶體單元中的資料不需要寫操作就可以自己發生變化,每次讀上來的值都可能不一樣;(

2)即使多次訪問變數的記憶體單元中寫資料,只寫不讀,也並不是在做無用功,而是有特殊意義的。

PV訊號量的一些理解

程序通常分為就緒 執行和阻塞三個工作狀態。三種狀態在某些條件下可以轉換,三者之間的轉換關係如下 程序三個狀態之間的轉換就是靠pv操作來控制的。pv操作主要就是p操作 v操作和訊號量。其中訊號量起到了至關重要的作用。訊號量訊號量是最早出現的用來解決程序同步與互斥問題的機制。訊號量 saphore 由乙...

關於訊號量

1 訊號量的定義 struct semaphore 在linux中,訊號量用上述結構體表示,我們可以通過該結構體定義乙個訊號量。2 訊號量的初始化 可用void sema init struct semaphore sem,int val 直接建立,其中val為訊號量初值。也可以用兩個巨集來定義和初...

Linux關於訊號量

dijkstra提出的 訊號量 概念是共發程式設計領域的一項重大進步 訊號量是一種變數,它只能取正整數值,對這些正整數只能進行兩種操作 等待和訊號 用兩種記號來表示訊號量的這兩種操作 p semaphore variable 代表等待 v semaphore variable 代表訊號 首先我們對訊...