linux信号量使用

本文详细介绍了如何使用信号量(semaphore)来协调两个并发线程(func1和func2)的执行顺序,确保它们能够交替运行。通过在main函数中创建并初始化信号量实例,然后在每个线程函数中使用sem_wait和sem_post操作来控制访问共享资源的时机。
摘要由CSDN通过智能技术生成
#include <pthread.h>  
#include <semaphore.h>
#include <unistd.h>  
#include <stdio.h>


sem_t sem1,sem2;

void func1(char * string){

    int i = 0;
    
    while(i<100){
    
    sem_wait(&sem1);

    printf("%s\n",string);
    i++;

    
    sem_post(&sem2);
  //因为sem2 在 fun2里面被用掉了,并没有post。
  //等fun1输出完成之后,再post,fun2就wait到了sem2,确保了fun1和fun2能交替运行
} }
void func2(char * string){ int i = 0; while(i<100){ sem_wait(&sem2); printf("%s\n",string); i++; sem_post(&sem1); } } int main(){ sem_init(&sem1,0,1); sem_init(&sem2,0,1); pthread_t tid1,tid2; pthread_create(&tid1,NULL,(void *)func1,"In A Thread!"); pthread_create(&tid2,NULL,(void *)func2,"In B Thread!"); pthread_join(tid1,NULL); pthread_join(tid2,NULL); }

 

转载于:https://www.cnblogs.com/wzben/p/5406422.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值