ring.c: 創建N個線程,它們構成一個環
? 創建N個線程:T1、T2、T3、… TN
? T1向T2發送整數1
? T2收到后將整數加1
? T2向T3發送整數2
? T3收到后將整數加1
? T3向T4發送整數3
? …
? TN收到后將整數加1
? TN向T1發送整數N
實現思路:
循環創建N
個線程,并在創建線程的時候對線程函數傳入線程序數,buffer
初始為0
,當傳入參數和buffer
相等的時候,將buffer
的值加一,并喚醒等待條件量wait_cond
的所有線程,否則線程等待wait_cond
。
第一個線程傳入的參數為0
,和buffer
相等,執行相應操作,并喚醒后續線程
實現代碼:
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>#define N 10int buffer=0;pthread_mutex_t mutex;
pthread_cond_t wait_cond;void *T(void *arg){int i;int item;int *param=(int *)arg;pthread_mutex_lock(&mutex);while((*param)!=buffer){pthread_cond_wait(&wait_cond,&mutex);}printf("線程▼:T%d Put:%d\n",(*param)+1,(*param)+1);buffer=(buffer+1)%N;pthread_cond_broadcast(&wait_cond);pthread_mutex_unlock(&mutex);}int main(){pthread_t pid[N];int j[N];int i;pthread_mutex_init(&mutex,NULL);pthread_cond_init(&wait_cond,NULL);for(i=0;i<N;i++){j[i]=i;pthread_create(&pid[i],NULL,T,(void*)&j[i]);}for(i=0;i<N;i++)pthread_join(pid[i],NULL);return 0;
}
歡迎留言交流。。。