實驗內容:
設有⼆元函式 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語言實...