操作系统上机作业--创建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<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;
}

这里写图片描述
欢迎留言交流。。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值