线程间的pv操作

C版本:

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

/*信号量*/  
sem_t sem;  
sem_t sem2;  
  
static void pthread(void);     
 
int main (void)     
{     
	/*线程的标识符*/  
	pthread_t pt_1 = 0;     
	
	int ret = 0;     
	/*信号量初始化*/  
	sem_init(&sem,0,1);  
	sem_init(&sem2,0,0);  
	/*创建线程*/  
	ret = pthread_create (&pt_1, NULL, (void *)pthread, NULL);          
	if (ret != 0)     
	{     
		perror ("pthread_create");     
	}     

	while(1)     
	{     
		sem_wait(&sem2);     /*等待信号量*/ 
		printf ("This is main!\n"); 
		sleep (3);  
		/*临界资源*/  

		sem_post (&sem);        /*释放信号量*/  

	}     

	/*等待线程的结束*/  
	pthread_join (pt_1, NULL);     
  
	printf ("main programme exit!\n");    
	return 0;     
}     
 
static void pthread(void)     
{     
	while(1)     
	{     
		sem_wait(&sem);     /*等待信号量*/ 
		printf ("This is pthread!\n");    
		sleep (2);   
		/*临界资源*/  

		sem_post (&sem2);        /*释放信号量*/  
	}     
}     



C++版本:

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


/*信号量*/  
sem_t sem;  
sem_t sem2;  
  
void *pthread(void *);     
 

int main (void)     
{     
	/*线程的标识符*/  
	pthread_t pt_1 = 0;     
	    
	int ret = 0;     
	/*信号量初始化*/  
	sem_init(&sem,0,1);  
	sem_init(&sem2,0,0);  
	/*创建线程*/  
	ret = pthread_create (&pt_1, NULL, pthread, NULL);        
	if (ret != 0)     
	{     
		perror ("pthread_create");     
	}     

	while(1)     
	{     
		sem_wait(&sem2);     /*等待信号量*/ 
		printf ("This is main!\n"); 
		sleep (3);  
		/*临界资源*/  
		 
		sem_post (&sem);      /*释放信号量*/  
	}     

	/*等待线程的结束*/  
	pthread_join (pt_1, NULL);     
  
	printf ("main programme exit!\n");    
	return 0;     
}     
 
void *pthread (void *)     
{     
	while(1)     
	{     
		sem_wait(&sem);     /*等待信号量*/ 
		printf ("This is pthread!\n");    
		sleep (2);   
		/*临界资源*/  

		sem_post (&sem2);    /*释放信号量*/  
	}     
}     





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值