C++ 同步

#include<semaphore.h>


sem_t   abc                //申请一个叫abc的semaphore变量

int sem_init (sem_t *sem, int pshared, unsigned int value);    //      初始化;第一个参数即为要初始化的sem_t变量,第二个参数为0即表示为当前进程的局部信号量,不应用于其                                                                                                                       他进程,第三个即为信号量初值设置


首先需要用sem_init(); 初始化sem_t型变量,并设置初始信号量。比如设置为1即变为互斥锁;
调用sem_wait(sem_t *); 信号量减一,即P操作

调用sem_post(sem_t *); 信号量加一,即V操作

当信号量为0时,调用sem_wait(); 函数阻塞,等待信号量 >0 时,才进行。


#include<semaphore.h>
#include<stdio.h>
#include<pthread.h>
using namespace std;

sem_t abc1;     //设置为10 
sem_t abc2;     //设置为0 
sem_t mutex;   //互斥变量,设为1 

  
 int num=0;
 void* tprocess1(void* args)
 {
 	while(1){
 		sem_wait(&abc1);
 		sem_wait(&mutex);
 		num++;
	 printf("跑出%d只兔兔\n",num);
	     sem_post(&mutex);
	   sem_post(&abc2);
 	    }
 	return NULL;    
 }

 void* tprocess2(void* args)
 {
 	while(1){
 	sem_wait(&abc2);
 	sem_wait(&mutex);
	 printf("亲一下,一只兔兔满足的走了\n");
	 num--;
	  printf("还剩%d只兔兔\n",num);
	  sem_post(&mutex);
	sem_post(&abc1);
 	    }
 	    
 	    
 	return NULL;    
 }


   int main()
    {
    	pthread_t t1;
    	pthread_t t2;
	    sem_init(&abc1,0,10);
	    sem_init(&abc2,0,0);
	    sem_init(&mutex,0,1);
    	pthread_create(&t1,NULL,tprocess1,NULL);
    	pthread_create(&t2,NULL,tprocess2,NULL);
    	pthread_join(t1,NULL);
    	pthread_join(t2,NULL);
    	return 0;
	}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值