1. 程式人生 > >Linux訊號量sem_t簡單例項運用

Linux訊號量sem_t簡單例項運用

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;
}