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 10
int 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;
}
欢迎留言交流。。。