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