訊號量實現生產者消費者(程式碼邏輯有問題,不適合多個消費者,不常用)
訊號量實現生產者消費者(程式碼邏輯有問題,不適合多個消費者,不常用)
#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
- 多執行緒-生產者消費者問題程式碼1執行緒
- Java實現生產者和消費者Java
- Java實現生產者-消費者模型Java模型
- 生產者和消費者(.net實現)
- linux 生產者與消費者問題Linux
- 直觀理解生產者消費者問題
- 生產者消費者模式模式
- 生產者消費者模型模型
- Python中的生產者消費者問題Python
- python中多執行緒消費者生產者問題Python執行緒
- 生產消費者模式模式
- synchronized同步程式+生產者消費者模式(訊號燈)解除可能出現的資源問題synchronized模式
- 使用BlockQueue實現生產者和消費者模式BloC模式
- 使用Disruptor實現生產者和消費者模型模型
- 多執行緒之生產者消費者執行緒
- 關於Java多執行緒實現生產者和消費者的問題Java執行緒
- RabbitMQ多消費者順序性消費訊息實現MQ
- 九、生產者與消費者模式模式
- python 生產者消費者模式Python模式
- ActiveMQ 生產者和消費者demoMQ
- java多執行緒總結六:經典生產者消費者問題實現Java執行緒
- 「Kafka應用」PHP實現生產者與消費者KafkaPHP
- 多生產者-消費者中假死現象的處理
- Java多執行緒——生產者消費者示例Java執行緒
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- 用Python多執行緒實現生產者消費者模式Python執行緒模式
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- 作業系統—生產者消費者問題詳解作業系統
- [原創]C#編寫的多生產者多消費者同步問題C#
- 新手練習-消費者生產者模型模型
- 分享一個生產者-消費者的真實場景
- java編寫生產者/消費者模式的程式。Java模式
- Java多執行緒——生產者和消費者模式Java執行緒模式