互斥量

代码

#include<stdio.h>
#include<iostream>
#include<stdlib.h>  
#include<stdio.h>  
#include<unistd.h>  
#include<pthread.h>  
#include<pthread.h>
using namespace std;

int total = 1000;
pthread_mutex_t mutex;//互斥量 
pthread_cond_t cond_0, cond_1;//条件变量,用于线程之间发送信号。 

void *consumer_0(void *ptr){
	int amount = 100;
	for(int i = 1; i < 9; i++){
		pthread_mutex_lock(&mutex);//上锁 
		total -= amount;
		cout << "消费者0消费:" << amount << " 剩余:" << total << endl;  
		pthread_cond_signal(&cond_1);//发送信号唤醒另一个线程。 
		pthread_mutex_unlock(&mutex);//解锁 
	}
	pthread_exit(0);
}

void *consumer_1(void *ptr){
	int amount = 10;
	for(int i = 1; i < 21; i++){
		pthread_mutex_lock(&mutex);
		total -= amount;
		cout << "消费者1消费:" << amount << " 剩余:" << total << endl;
		pthread_cond_signal(&cond_0);
		pthread_mutex_unlock(&mutex);
	}
	pthread_exit(0);
}

int main(){
	pthread_t con_0, con_1;
	pthread_mutex_init(&mutex, 0);
	pthread_cond_init(&cond_0, 0);
	pthread_cond_init(&cond_1, 0);
	pthread_create(&con_0, 0, consumer_0, 0);
	pthread_create(&con_1, 0, consumer_1, 0);
	pthread_join(con_0, 0);
	pthread_join(con_1, 0);
	pthread_cond_destroy(&cond_0);
	pthread_cond_destroy(&cond_1);
	pthread_mutex_destroy(&mutex);
}