生產者和消費者模型

2021-10-20 15:08:36 字數 1594 閱讀 7656

條件變數:可以引起阻塞,並非鎖,要和互斥量組合使用

超時等待

int pthread_cond_timedwait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,const struct timespec *restrict abstime);

struct timesec

條件變數阻塞等待

int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);

先釋放mutex

阻塞在cond條件變數上

銷毀乙個條件變數

int pthread_cond_destroy(pthread_cond_t *cond);

初始化乙個條件變數

int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);

pthread_cond_t cond=pthread_cond_initializer;

至少喚醒乙個阻塞在條件變數cond上的執行緒

int pthread_cond_signal(pthread_cond_t *cond);

喚醒阻塞在條件變數cond上的全部執行緒

int pthread_cond_broadcast(pthread_cond_t *cond);

條件變數:避免沒有必要的競爭

cond_product.c

#include

#include

#include

#include

pthread_mutex_t mutex=pthread_mutex_initializer;

pthread_cond_t cond=pthread_cond_initializer;

int beginnum=

100;

typedef

struct _prodinfoprodinfo;

prodinfo *head=

null

;void

*thr_producter

(void

*arg)

return

null;

}void

*thr_customer

(void

*arg)

prod=head;

head=head->next;

printf

("----%s----self=%lu----%d\n"

,__function__,

pthread_self()

,prod->num)

;pthread_mutex_unlock

(&mutex)

;sleep

(rand()

%2);

free

(prod);}

return

null;

}int

main()

生產者和消費者模型

基本的思路 這個問題相當於是生產者和消費者模型的問題 訊號量的含義 核心程式 define buffer count 100 定義資料佇列中資料塊的數目。block g buffer buffer count 資料緩衝區佇列 thread g threadb procb 儲存執行緒 訊號量,表示現在...

生產者和消費者模型

生產者和消費者模型,同時此函式就是單執行緒執行併發操處理的過程 import time defconsume name print 我是 s,我準備開始吃包子了 name while true baozi yield 函式當中有yield就是生成器函式 time.sleep 1 print s開心的...

生產者消費者模型

1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...