Linux訊號量sem_t簡單例項運用
阿新 • • 發佈:2018-12-16
sem_t sem; 定義一個訊號量變數。使用時需首先使用sem_init()函式初始化。 在多執行緒程式設計中,想讓某個執行緒阻塞等待,減少cpu佔用,在該需要執行時才執行。使用訊號量一個A執行緒sem_wait(),阻塞等待;一個B執行緒在需要執行A執行緒時sem_post(),解除A執行緒阻塞。
下面是簡單demo:
#include <stdint.h> #include <semaphore.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> sem_t sem; void *testfunc(void *arg) { while(1) { sem_wait(&sem); //do something.... printf("hello world...\n"); } } int main() { pthread_t ps; sem_init(&sem, 0, 0); pthread_create(&ps,NULL,testfunc,NULL); while(1) { //每隔一秒sem_post 訊號量sem加1 子執行緒sem_wait解除等待 列印hello world sem_post(&sem); sleep(1); } return 0; }