Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1663474
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类: C/C++

2007-03-24 22:40:11


看看一个非常好的生产者/消费者的多线程例子:

Code Example: Producer/Consumer with Bounded Length (Using Condition Variables)

void *producer(void *arg)      
{
    request_t *request;     
    while(1)     
    {
        request = get_request();     
        pthread_mutex_lock(&requests_lock);     
        while (length >= 10)     
            pthread_cond_wait(&requests_producer, &requests_lock);     
        add(request);     
        length++;     
        pthread_mutex_unlock(&requests_lock);     
        pthread_cond_signal(&requests_consumer);     
    }      
}  
  
void *consumer(void *arg)      
{
    request_t *request;     
    while(1)     
    {
        pthread_mutex_lock(&requests_lock);     
        while (length == 0)     
            pthread_cond_wait(&requests_consumer, &requests_lock);     
        request = remove();     
        length--;     
        pthread_mutex_unlock(&requests_lock);     
        pthread_cond_signal(&requests_producer);     
        process_request(request);     
    }      
}      

看pthread代码,发现pthread的条件变量用信号量实现的



阅读(914) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~