在前文《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 臨界資源 一次僅允許乙個程序使用的資源稱為臨界資源。如印表機,一些變數 資料 臨界資源的訪問,必須互斥進行,每個程序中,訪問臨界資源的那段 稱為臨界區 為保證臨界資源的正確使用,可以把臨界資源的訪...