Domin1c0's Blog

A technical blog sharing my journey in programming, development, and open source.

View on GitHub
22 July 2025

semaphore

by

信号量

信号量介绍

信号量相当于多把锁,可以理解为是加强版的互斥锁

相关函数

//生产者线程处理函数
void *producter(void *arg)
{
    NODE * pNode = NULL;
    while(1)
    {
        pNode = (NODE*)malloc(sizeof(NODE));
        if(pNode == NULL)
        {
            perror("malloc error\n");
        }
        pNode -> data = rand()%1000;

        //sem_producter--,若为0则阻塞
        sem_wait(&sem_producter);

        pNode -> next = head;
        head = pNode;

        //sem_consumer++
        sem_post(&sem_consumer);
        sleep(rand()%3);
    }
}
//消费者线程处理函数
void *consumer(void *arg)
{
    NODE *pNode = NULL;
    while(1)
    {
        //sem_consumer--,若为0则阻塞
        sem_wait(&consumer);

        pNode = head;
        head = head -> next;

        //sem_producter++
        sem_post(&producter);

        free(pNode);
        pNode = NULL;

        sleep(rand()%3);
    } 
}
tags: 进程 - 线程同步