linux筆記之實現線程的信號量

一.關於信號量的相關接口

  • 定義一個信號量
sem_t sem;
  • 初始化信號量
    這裏寫圖片描述
  • “p”操作
    這裏寫圖片描述
  • “v”操作
    這裏寫圖片描述

二.用生產者-消費者模型來實現信號量的相關接口

代碼如下

#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>

#define  SIZE 64

sem_t blanks,datas;
int queue[SIZE];


void* Producter(void* arg)
{
    int i=0;
    while(1)
    {
        sem_wait(&blanks);
        int data=rand()%1234;
        queue[i]=data;
        printf("Producter:  %d\n",data);
        sem_post(&datas);
        i++;
        i%=SIZE;
        sleep(1);
    }
}
void* Consumer(void* arg)
{
    int i=0;
    while(1)
    {
        sem_wait(&datas);
        int data;
        data=queue[i];
        printf("Consumer:  %d\n",data);
        i++;
        i%=SIZE;
        sem_post(&blanks);
    }
}
int main()
{
    sem_init(&blanks,0,64);
    sem_init(&datas,0,0);
    pthread_t tid1;
    pthread_t tid2;
    pthread_create(&tid1,NULL,*Producter,NULL);
    pthread_create(&tid2,NULL,*Consumer,NULL);
    pthread_join(tid1,NULL);
    pthread_join(tid2,NULL);


    return 0;
}

結果圖如下:
這裏寫圖片描述

擴展:

如何使用信號量與互斥鎖相關接口實現多生產者與多消費者模型?
答案見下篇。

發佈了63 篇原創文章 · 獲贊 29 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章