zoukankan      html  css  js  c++  java
  • 线程相关函数(7)-sem_post(), sem_wait() 信号量

    sem_t
    sem_init
    sem_wait
    sem_trywait
    sem_timedwait
    sem_post
    sem_destroy

    生产者消费者实例:

    #include <stdlib.h>
    #include <pthread.h>
    #include <stdio.h>
    #include <semaphore.h>
    #define NUM 5 int queue[NUM]; sem_t blank_number, product_number;
    void *producer(void *arg) {   int p = 0;   while (1) {     sem_wait(&blank_number);     queue[p] = rand() % 1000 + 1;     printf("Produce %d ", queue[p]);     sem_post(&product_number);     p = (p+1)%NUM;     sleep(rand()%5);   }
    }
    void *consumer(void *arg) {   int c = 0;   while (1) {     sem_wait(&product_number);     printf("Consume %d ", queue[c]);     queue[c] = 0;       sem_post(&blank_number);     c = (c+1)%NUM;     sleep(rand()%5);   } }
    int main(int argc, char *argv[]) {   pthread_t pid, cid;   sem_init(&blank_number, 0, NUM);   sem_init(&product_number, 0, 0);   pthread_create(&pid, NULL, producer, NULL);   pthread_create(&cid, NULL, consumer, NULL);   pthread_join(pid, NULL);   pthread_join(cid, NULL);   sem_destroy(&blank_number);   sem_destroy(&product_number);   return 0; }
  • 相关阅读:
    [ZJOI2011]营救皮卡丘
    TJOI2018Party
    HEOI2013SAO
    [BJOI2017]树的难题
    [HNOI2016]序列
    [SHOI2007]善意的投票
    CF802C Heidi and Library (hard)
    SPOJ DIVCNT2
    LOJ子序列
    BZOJ2882工艺
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/8268677.html
Copyright © 2011-2022 走看看