作業系統實驗二 執行緒和管道通訊實驗

2021-10-11 14:26:35 字數 2375 閱讀 3204

實驗內容:

設有⼆元函式 f(x, y) = f(x) + f(y)

其中:f(x) = f(x-1) * x (x >1)

f(x) = 1 (x=1)

f(y) = f(y-1) + f(y-2) (y > 2)

f(y) = 1 (y=1, 2)

請程式設計建⽴ 3 個併發協作程序或執行緒,它們分別完成 f(x, y)、f(x)、f(y)

執行緒間協作

#include

#include

#include

#include

int pipe1[2]

,pipe2[2]

;pthread_t thrd1, thrd2,thrd3;

void

task1

(int

*x)int

solvey

(int x)

void

task2

(int

*y)void

task3

(int

*num)

while

(r1==

0||r2==0)

;int fxy=fx+fy;

printf

("f(x,y)= %d\n"

,fxy)

;close

(pipe1[0]

);close

(pipe2[0]

);}int

main()

if(pipe

(pipe2)

<0)

//printf("");

scanf

("%d%d"

,&x,

&y);

//建立三個執行緒,分別完成f(x),f(y),f(xy)

ret =

pthread_create

(&thrd1,

null,(

void

*) task1,

(void*)

&x);

if(ret)

ret =

pthread_create

(&thrd2,

null,(

void

*) task2,

(void*)

&y);

if(ret)

int num3=3;

ret =

pthread_create

(&thrd3,

null,(

void

*) task3,

(void*)

&num3);if

(ret)

pthread_join

(thrd3,

null);

pthread_join

(thrd2,

null);

pthread_join

(thrd1,

null);

exit

(exit_success)

;}

程序間協作:

#include

#include

#include

intmain()

if(pipe

(pipe12)

<0)

if(pipe

(pipe21)

<0)

if(pipe

(pipe22)

<0)

//建立兩個子程序,分別完成f(x),f(y).父程序完成f(xy)

pid1=

fork()

;if(pid1<0)

else

if(pid1==0)

while

(fx==0)

;return0;

} pid2=

fork()

;if(pid2<0)

else

if(pid2==0)

}write

(pipe22[1]

,&fy,

sizeof

(int))

;}while

(fy==0)

;return0;

}//printf("%d\n",pid2);

int x,y;

scanf

("%d %d"

,&x,

&y);

int r1=

0,r2=0;

dowhile

(r1==

0||r2==0)

;return exit_success;

}

作業系統實驗四 管道通訊

一 實驗名稱 二 實驗目標 學習如何利用管道機制 訊息緩衝佇列 共享儲存區機制進行程序間的通訊,並加深對上述通訊機制的理解。三 實驗要求 編寫一c語言程式,使其用管道來實現父子程序間通訊。子程序向父程序傳送字串 is sending a message to parent 父程序則從管道中讀出子程序...

作業系統之管道通訊

只能用於具有親緣關係的程序之間的通訊 使用pipe 建立乙個無名管道 標頭檔案 include 可以使用read 和write 對無名管道進行操作 int fd 2 pipe fd pipe建立管道,fd 0 指向無名管道的讀端,實現接收程序 系統呼叫read fd 0 buf,size 從管道出口...

作業系統 程序間通訊實驗題之共享記憶體

實驗題目 參考題目 用pthread執行緒 sem mutex模擬 生產者 消費者 問題 用 共享記憶體 的方法實現父 子程序之間的生產者消費者問題,訊號量操作採用 sem init sem wait sem post 模式 同時參考以下網頁 a linux下利用訊號量函式和共享記憶體函式和c語言實...