linux编程实现三个线程ABC,并让它们顺次打印自己的ID,使用信号量

本文详细讲解如何在Linux环境下进行多线程编程,通过信号量机制确保线程A、B、C依次打印自己的ID,实现线程间的同步与协调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <pthread.h>
#include <stdio.h>
#include <semaphore.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>

static sem_t sem1,sem2,sem3; 
int global = 0;
#define MAX 15

void *t1_exe(void *arg){
     while (global<MAX) { 
         sem_wait(&sem1) ; 
         printf("In thread1 %lu\n",pthread_self());
 		 global++; 
         sem_post(&sem2);
		 sleep(1);  
		}
}
void *t2_exe(void *arg){
      while (global<MAX) { 
         sem_wait(&sem2) ; 
         printf("In thread2 %lu\n",pthread_self());
 		 global++; 
         sem_post(&sem3);
		 sleep(1);  
		} 
}
void *t3_exe(void *arg){
      while (global<MAX) { 
         sem_wait(&sem3) ; 
         printf("In thread3 %lu\n",pthread_self());
 		 global++; 
         sem_post(&sem1);
		 sleep(1);  
		} 
}
void main() 
{
   int i;
   pthread_t t_a[3];
   sem_init(&sem1,0,1);
   sem_init(&sem2,0,0);
   sem_init(&sem3,0,0);
   
   pthread_create(&t_a[0],NULL,t1_exe,(void *)NULL);/*´´½¨*/
   pthread_create(&t_a[1],NULL,t2_exe,(void *)NULL);
   pthread_create(&t_a[2],NULL,t3_exe,(void *)NULL);
   
   for(i=0;i<3;i++)
      pthread_join(t_a[i],NULL);

   sem_destroy(&sem1);
   sem_destroy(&sem2);
   sem_destroy(&sem3);
   return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值