操作系统上机作业--创建N个线程(多线程)

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
#include
#include

#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;ivoid*)&j[i]);
    }

    for(i=0;ireturn 0;
}

操作系统上机作业--创建N个线程(多线程)_第1张图片
欢迎留言交流。。。

你可能感兴趣的:(c,操作系统)