Linux:多线程——生产者与消费者模型
123原则
123原则指的含义:
1:1个线程安全的队列
2:2种角色的线程
3:3种关系,即生产者与消费者之间互斥;消费者与消费者之间互斥;生产者与消费者之间同步+互斥
优点:
(1)支持忙闲不均
(2)生产者与消费者解耦开来
(3)支持高并发
代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <queue>
#include <iostream>
using namespace std;
#define PTHREADCOUNT 2
class blackQueue
{
public:
blackQueue()
{
capacity_ = 1;
pthread_mutex_init(&lock_,NULL);
pthread_cond_init(&pcond,NULL);
pthread_cond_init(&ccond,NULL);
}
~blackQueue()
{
pthread_mutex_destroy(&lock_);
pthread_cond_destroy(&pcond);
pthread_cond_destroy(&ccond);
}
void Push(int data)
{
pthread_mutex_lock(&lock_);
while(que_.size() >= capacity_)
{
pthread_cond_wait(&pcond,&lock_);
}
que_.push(data);
pthread_mutex_unlock(&lock_);
pthread_cond_signal(&ccond);
}
void Pop(int *data)
{
pthread_mutex_lock(&lock_);
while(que_.empty())
{
pthread_cond_wait(&ccond, &lock_);
}
*data = que_.front();
que_.pop();
pthread_mutex_unlock(&lock_);
pthread_cond_signal(&pcond);
}
priv