程序同步的兩種實現

2021-09-16 12:03:17 字數 1143 閱讀 3702

在前文《linux – 程序控制》部落格中,我曾提到過父子程序之間的同步有兩種方法:分別是基於管道和訊號實現。

為什麼需要程序的同步,當我們建立乙個新程序時,為了保證父子程序的執行按照我們預期的時序進行,所以需要加入同步機制。下面直接以**示例來實現兩種同步方式。

#include #include #include #include #include #include "include/debug.h"

static int pfd1[2], pfd2[2];

void initialize(void)

void wake_parent(void)

void wait_parent(void)

void wake_child(void)

void wait_child(void)

int main (int argc, char *ar**)

else if (pid > 0) else

return 0;

}

#include #include #include #include #include #include #include "include/debug.h"

static volatile sig_atomic_t sigflag; /* set nonzero by sig handler */

static sigset_t mask, omask, zeromask;

static void sig_usr(int signo) /* one signal handler for sigusr1 and sigusr2 */

void initialize(void)

void wake_parent(pid_t pid)

void wait_parent(void)

void wake_child(pid_t pid)

void wait_child(void)

int main (int argc, char *ar**)

else if (pid > 0) else

return 0;

}

system v ipc、posix ipc這兩種當然也可以實現程序同步,但是不在本文講解。

程序同步的幾種方式

1 訊號量 用於程序間傳遞訊號的乙個整數值。在訊號量上只有三種操作可以進行 初始化,p操作和v操作,這三種操作都是原子操作。p操作 遞減操作 可以用於阻塞乙個程序,v操作 增加操作 可以用於解除阻塞乙個程序。基本原理是兩個或多個程序可以通過簡單的訊號進行合作,乙個程序可以被迫在某一位置停止,直到它接...

程序同步的經典問題

某系統中有乙個緩衝區,程序p1不斷地將資料寫入緩衝區,程序p2不斷地從緩衝區中取出資料進行處理。假設該快取區只能容納n個資料,且一開始緩衝區為空,試著用wait signal 語句描述其同步互斥關係 即pv操作 解 訊號量的宣告如下 semaphore mutex 1 semaphore empty...

12程序同步的概念

程序同步的基本概念 多道程式下,程序是併發的,為了協調程序之間的相互制約關係,引入了程序同步的概念。1 臨界資源 一次僅允許乙個程序使用的資源稱為臨界資源。如印表機,一些變數 資料 臨界資源的訪問,必須互斥進行,每個程序中,訪問臨界資源的那段 稱為臨界區 為保證臨界資源的正確使用,可以把臨界資源的訪...