執行緒同步
設計並實現乙個計算執行緒與乙個i/o執行緒共享緩衝區的同步與通訊, 程式要求:
兩個執行緒,共享公共變數a;
執行緒1負責計算(1到100的累加,每次加乙個數);
執行緒2負責列印(輸出累加的中間結果);
主程序等待子執行緒退出。
(1)採用讀寫鎖來實現
pthread_rwlock_t rwlock;---建立一把讀寫鎖
---建立乙個寫的執行緒
pthread_create(&ptid[0],null,writenum,null); //寫函式
for(i = 1; i<= 100; i++)---建立讀執行緒 以及執行緒函式執行內容
pthread_create(&ptid[1],null,readnum,null); //讀函式
while(1---**讀寫執行緒)
pthread_join(ptid[0---結果:], null);
pthread_join(ptid[
1], null);
(2)採用訊號燈實現
---建立訊號燈
1 semid = semget((key_t)ipc_private,2,ipc_creat|0666); //--給訊號燈賦值:上面我們建立了兩個訊號燈2if(semid == -1
)
1---建立兩個程序:乙個執行加i並寫num操作,乙個執行讀num操作union semun un1, un2;
2 un1.val = 0;3
if((semctl(semid,0,setval,un1)) == -1
) 6 un2.val = 1;7
if((semctl(semid,1,setval,un2)) == -1
)
1 pthread_create(&ptid[0],null,(void *)writenum,null); //寫函式2
3for(i = 1; i<= 100; i++)
1 pthread_create(&ptid[1],null,(void *)readnum,null); //---p、v操作函式讀函式2
3while(1
)
1struct
sembuf sem;
2 sem.sem_num = index; //
訊號量編號
3 sem.sem_op = -1; //
p操作-1
4 sem.sem_*** = 0; //
操作標記:0或ipc_nowait等
5if(semop(semid,&sem,1) == -1
)
1---執行結果:struct
sembuf sem;
2 sem.sem_num =index;
3 sem.sem_op = 1
;4 sem.sem_*** = 0;5
if(semop(semid,&sem,1) == -1
)
執行緒同步通訊
package itcast.thread public class traditionalthreadcommunication start for int i 1 i 50 i public class business catch interruptedexception e for int ...
執行緒同步通訊
看傳智播客張孝祥講的乙個例子。子執行緒迴圈10次,接著主線程迴圈100次,再次回到子執行緒迴圈10次,接著再回到主線程迴圈100次,如此迴圈50次,請寫出程式。package cn.itcast.heima2 public class traditionalthreadcommunication s...
初探 程序通訊與執行緒同步
不推薦使用signal 介面,推薦使用sigacton 相關介面 訊號集處理函式 int sigemptyset sigset t set int sigfillset sigset t set int sigdelset sigset t set,int signo int sigmember s...