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

本文介绍了一个使用C语言实现的线程环通信实验,通过创建N个线程构成环形结构,每个线程接收前一个线程发来的整数并加1后再传递给下一个线程。文章详细展示了如何利用pthread库进行线程同步与通信。
339





