訊號量實現生產者消費者(程式碼邏輯有問題,不適合多個消費者,不常用)
訊號量實現生產者消費者(程式碼邏輯有問題,不適合多個消費者,不常用)
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <semaphore.h>
struct Node{
int val;
Node* next;
};
sem_t sem_producer; // 生產者的訊號量
sem_t sem_consumer; // 消費者的訊號量
Node* head = NULL;
void* producer(void* argv){
while(1){
Node* p = (Node*)malloc(sizeof(Node));
p->val = rand() % 1000;
// sem_wait做--操作,初始化的時候我們給與他值,意思是他可以生產幾個,當生產滿了訊號量變為0,阻塞
sem_wait(&sem_producer);
printf("sheng chan le %d\n", p->val);
p->next = head;
head = p;
// sem_post做++操作,通知消費者有東西可以拿
sem_post(&sem_consumer);
sleep(1);
}
}
void* consumer(void* argv){
Node* p = NULL;
while(1){
// sem_consumer為0的時候阻塞,被通知的時候做--操作去拿
sem_wait(&sem_consumer);
printf("xiao fei le %d\n", head->val);
p = head;
head = head->next;
// 拿完之後告訴生產者可以繼續生產了
sem_post(&sem_producer);
free(p);
p = NULL;
}
}
int main()
{
//訊號量初始化/初始化的訊號量/線上程中使用/初始化個數
sem_init(&sem_producer, 0, 5);
sem_init(&sem_consumer, 0, 0);
pthread_t thread1;
pthread_create(&thread1, NULL, consumer, NULL);
pthread_t thread2;
pthread_create(&thread2, NULL, producer, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
//銷燬訊號量
sem_destroy(&sem_producer);
sem_destroy(&sem_consumer);
return 0;
}
相關文章
- 生產者消費者問題-C++程式碼實現C++
- java實現生產者消費者問題Java
- python中多程式消費者生產者問題Python
- 面試必問:訊號量與生產者消費者問題!面試
- 生產者與消費者問題
- linux 生產者與消費者問題Linux
- 生產者消費者
- Java實現生產者和消費者Java
- python中多執行緒消費者生產者問題Python執行緒
- 生產者消費者模式模式
- 生產者消費者模型模型
- synchronized同步程式+生產者消費者模式(訊號燈)解除可能出現的資源問題synchronized模式
- 使用BlockQueue實現生產者和消費者模式BloC模式
- 使用Disruptor實現生產者和消費者模型模型
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- python 生產者消費者模式Python模式
- 生產消費者模式模式
- RabbitMQ多消費者順序性消費訊息實現MQ
- 多生產者-消費者中假死現象的處理
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- 「Kafka應用」PHP實現生產者與消費者KafkaPHP
- Java多執行緒——生產者消費者示例Java執行緒
- 作業系統—生產者消費者問題詳解作業系統
- 九、生產者與消費者模式模式
- ActiveMQ 生產者和消費者demoMQ
- Thinking in Java---執行緒通訊+三種方式實現生產者消費者問題ThinkingJava執行緒
- Python並行程式設計(三):多執行緒同步之semaphore(訊號量)實現簡易生產者-消費者模型Python並行行程程式設計執行緒模型
- 使用Python佇列和多執行緒實現生產者消費者Python佇列執行緒
- 分享一個生產者-消費者的真實場景
- C++ condition_variable 實現生產者消費者模型C++模型
- 使用wait()與notifyAll()實現生產者與消費者模式AI模式
- java編寫生產者/消費者模式的程式。Java模式
- 生產者與消費者之Android audioAndroid
- 新手練習-消費者生產者模型模型
- 生產者消費者模式,以及基於BlockingQueue的快速實現模式BloC
- golang 併發程式設計之生產者消費者Golang程式設計
- Python-多執行緒及生產者與消費者Python執行緒
- 實戰Spring4+ActiveMQ整合實現訊息佇列(生產者+消費者)SpringMQ佇列