#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <iostream>
static sem_t re;
int a = 0;
int b = 0;
// 初始化分子
void* getFz(void *) {
a = 10;
sem_post(&re);
}
// 初始化分母
void* getFm(void *) {
b = 20;
sem_post(&re);
}
// 求(int)a / b;
void* getAr(void *) {
sem_wait(&re);
sem_wait(&re);
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << (double)a / b << std::endl;
}
int main() {
// 三个线程干三件事
pthread_t pthread_fz;
pthread_t pthread_fm;
pthread_t pthread_re;
// 初始化 信号量
sem_init(&re,0,0);
// 初始化三个线程
pthread_create(&pthread_fz,NULL,getFz,NULL);
pthread_create(&pthread_fm,NULL,getFm,NULL);
pthread_create(&pthread_re,NULL,getAr,NULL);
// 线程添加到主线程的控制下
pthread_join(pthread_fz,NULL);
pthread_join(pthread_fm,NULL);
pthread_join(pthread_re,NULL);
// 销毁信号量
sem_destroy(&re);
}
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子
pthread和信号量的简单例子