linux ptheard 生产者消费者
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <pthread.h>
4
5 pthread_mutex_t mutex;
6 pthread_cond_t cond_full;
7 pthread_cond_t cond_empty;
8
9 int g_iBufSize = ;
void *thread_producer(void* arg)
{
while(true)
{
printf("thread_producer:pthread_mutex_lock\n");
pthread_mutex_lock(&mutex);
// 拿到lock就可以访问,不会冲突,但是不一定满足条件,cond是为了在满足条件的时候通知另一个进程
if( != g_iBufSize) //如果条件不满足就调用wait函数等待条件满足
{
printf("thread_producer:pthread_cond_wait cond_empty \n");
pthread_cond_wait(&cond_empty, &mutex); // 这句话的前提是先有锁,这时候会自动先解锁,等到时机来临在加锁
}
//前面的wait操作已经包含了枷锁,这里直接访问
printf("thread_producer>>>>>\n");
g_iBufSize = ;
printf("thread_producer: pthread_cond_signal\n");
pthread_cond_signal(&cond_full);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
void *thread_consumer(void* arg)
{
while(true)
{
printf("thread_consumer:pthread_mutex_lock\n");
pthread_mutex_lock(&mutex);
if( == g_iBufSize)
{
printf("thread_consumer: pthread_cond_wait\n");
pthread_cond_wait(&cond_full, &mutex);
}
printf("thread_consumer>>>\n");
g_iBufSize = ;
printf("thread_consumer: pthread_cond_signal\n");
pthread_cond_signal(&cond_empty);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
//g++ -o bin1 -lpthread mutithread.cpp
int main()
{
void *retval1, *retval2;
pthread_t thread_id_1, thread_id_2;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond_full, NULL);
pthread_cond_init(&cond_empty, NULL);
pthread_cond_signal(&cond_empty);
pthread_create(&thread_id_1, NULL, thread_producer, NULL);//int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)(*start_rtn)(void*),void *arg);
pthread_create(&thread_id_2, NULL, thread_consumer, NULL);
pthread_join(thread_id_1, &retval1); // 阻塞等线程执行完
pthread_join(thread_id_2, &retval2);
pthread_cond_destroy(&cond_full);
pthread_cond_destroy(&cond_empty);
pthread_mutex_destroy(&mutex);
return ;
}
linux ptheard 生产者消费者的更多相关文章
- Linux 信号量 生产者消费者小例题
菜鸟偶遇信号量,擦出火花(只有不熟才会有火花).于是上网搜资料和看<Unix环境高级编程>实现了几个小例题,高手请勿喷!这几位写得非常好啊: 题目来源: http://www.it165. ...
- linux进程 生产者消费者
#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> # ...
- Linux 进程间通信(包含一个经典的生产者消费者实例代码)
前言:编写多进程程序时,有时不可避免的需要在多个进程之间传递数据,我们知道,进程的用户的地址空间是独立,父进程中对数据的修改并不会反映到子进程中,但内核是共享的,大多数进程间通信方式都是在内核中建立一 ...
- linux下多线程互斥量实现生产者--消费者问题和哲学家就餐问题
生产者消费者问题,又有界缓冲区问题.两个进程共享一个一个公共的固定大小的缓冲区.其中一个是生产者,将信息放入缓冲区,另一个是消费者,从缓冲区中取信息. 问题的关键在于缓冲区已满,而此时生产者还想往其中 ...
- Linux线程编程之生产者消费者问题
前言 本文基于顺序循环队列,给出Linux生产者/消费者问题的多线程示例,并讨论编程时需要注意的事项.文中涉及的代码运行环境如下: 本文假定读者已具备线程同步的基础知识. 一 顺序表循环队列 1.1 ...
- Linux C多线程实现生产者消费者
今天学习了用Linux C进行线程的同步,实现类似生产者消费者的问题.下面我就来分享我的代码 #include<stdio.h> #include<pthread.h> #in ...
- Linux线程编程之生产者消费者问题【转】
转自:http://www.cnblogs.com/clover-toeic/p/4029269.html 前言 本文基于顺序循环队列,给出Linux生产者/消费者问题的多线程示例,并讨论编程时需要注 ...
- Linux组件封装(五)一个生产者消费者问题示例
生产者消费者问题是计算机中一类重要的模型,主要描述的是:生产者往缓冲区中放入产品.消费者取走产品.生产者和消费者指的可以是线程也可以是进程. 生产者消费者问题的难点在于: 为了缓冲区数据的安全性,一次 ...
- Linux多线程实践(8) --Posix条件变量解决生产者消费者问题
Posix条件变量 int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_co ...
随机推荐
- hdoj 1242 Rescue
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- Oracle数据库字符串连接方法
转至:http://database.51cto.com/art/201011/232267.htm 和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串拼接,其使用方式和MSSQLSe ...
- 修改sublime 侧边栏 颜色 等
通过 Package Control 安装 PackageResourceViewer 插件 安装成功后 快捷键 ctrl+shift+p 输入 PackageResourceViewer 找到 ...
- SQLite 入门教程(三)好多约束 Constraints(转)
转于: SQLite 入门教程(三)好多约束 Constraints 一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应 ...
- MyEclipse x.x各版本终极优化配置指南
先说优化:随着myeclipse版本不断更新,其功能不断强大,更加智能及人性化,为开发人员提供了很多便利.提高了开发速度,但是也牺牲了性能,让很多机器配置稍差的开发人员头疼不已.其实我们平时常用的功能 ...
- WinDbug抓取进程dump
安装WinDbug(包含在 Windows Kits-debugger 中)后,运行如下命令将会在 explorer.exe进程发生崩溃后抓取相应的内存数据到D盘根目录下的一个文件夹中 adplus. ...
- centos 5.4 安装nodejs + npm(转)
而在安装nodejs的时候,需要用到,所以需要手动安装bz2库. sudo yum install -y bzip2* cd Python-/Modules/zlib ./configure make ...
- oracle数据库导入导出的dmp(转)
window下: imp必须要dba用户,所以用sysdba用户登陆,然后给予chnlmgr用户dba权限 grant connect,resource,dba to chnlmgr; 全部导入 im ...
- android开发入门经验 ADT Bundle环境搭建
现在有许多做开发的转做移动端开发,做J2EE的转做Android开发,我也把自己的一些入门经验与大家分享一下,希望能给你带来帮助. 工具/原料 JDK,ADT,JAVA 方法/步骤 开发工具的准备 ...
- SecureCRT恢复默认字体
1\要想永久的改变的就跟我来吧,选项--全局选项--常规--默认会话--编辑默认设置--外观--当前颜色方案--选择自己喜欢的方案就行啦,然后选择保存就OK啦方案二: 自从装了Win7之后,觉得sec ...