pthread和訊號量的簡單例子
阿新 • • 發佈:2019-01-30
#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); }