c语言如何给变量加锁,C语言互斥锁-条件变量实现公共缓存区数据读写

#include char buffer[128];

int has_data=0;

pthread_mutex_t mutex;

pthread_cond_t cond;

pthread_cond_t cond2;

void read_buf(void)

{

do

{

pthread_mutex_lock(&mutex);//锁定互斥锁

if(has_data==0)

{

/*阻塞线程,等待另外一个线程发送信号,同时为公共数据区解锁*/

pthread_cond_wait(&cond,&mutex);

}

else if(has_data==1)

{

printf("the data : %s\n",buffer);

has_data=0;

pthread_cond_signal(&cond2);

}

pthread_mutex_unlock(&mutex);//打开互斥锁

}while(strcmp(buffer,"#")!=0);

pthread_exit(NULL);

}

void write_buf(void)

{

char input[128];

do

{

pthread_mutex_lock(&mutex);

if(has_data==0)

{

memset(input,'\0',128);

printf("input data:\t");

scanf("%s",input);

sprintf(buffer,"%s",input);

has_data=1;

pthread_cond_signal(&cond);//条件改变,唤醒阻塞的线程

}

else if(has_data==1)

{

pthread_cond_wait(&cond2,&mutex);

}

pthread_mutex_unlock(&mutex);

}while(strcmp(input,"#")!=0);

pthread_exit(NULL);

}

int main(int argc,char **argv)

{

pthread_t id,id2;

pthread_cond_init(&cond,NULL);

pthread_cond_init(&cond2,NULL);

pthread_mutex_init(&mutex,NULL);

pthread_create(&id,NULL,(void *)read_buf,NULL);//返回值为0,创建成功

pthread_create(&id2,NULL,(void *)write_buf,NULL);

pthread_join(id,NULL);

pthread_join(id2,NULL);

pthread_mutex_destroy(&mutex);

pthread_cond_destroy(&cond);

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

view-activity跟控件在onkey事件上的传递关系

android 中Activity跟View对于键盘的监听,主要有以下几个方法 //按键按下 public boolean onKeyDown(int keyCode, KeyEvent event) {} //按键弹起 public boolean onKeyUp(int keyCode, KeyEvent event) {} //常按 public boolean onKeyLongPress(int keyCode, Ke…

PMP考试的过与不过

*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com *************************************************** 我在一年多时间里参加了三次PMP考试,前两次都失败,直到第三次才…

JPA一对多循环引用的解决

说是解决,其实不是很完美的解决的,写出来只是想记录一下这个问题或者看一下有没有哪位仁兄会的,能否知道一二。 下面说说出现问题: 问题是这样的,当我查询一个一对多的实体的时候,工具直接就爆了&#xff0…

太原理工大学c语言课程设计报告,[太原理工大学C语言实验报告.doc

[太原理工大学C语言实验报告本科实验报告课程名称: 程序设计技术B实验项目:实验地点: 明向校区软件学院机房专业班级: 学号:学生姓名:指导教师: 呼克佑2014年 12月 日实验名称 实验一 C语言的运…

网页常用动态效果--悬浮广告

关键在于动态获取滚动坐标值 测试滚动事件 $(window).scroll(function(){ console.log($(window).scrolltop()); }) 获取三个高度:窗口高度,盒子高度以及滚动坐标值,将广告盒子设置为绝对定位,当鼠标滚动时,其top值为滚…

打印英文年历C语言函数,C语言打印年历

voidshow_year(int year){inti,j,k,t,n;                           // 用来辅助计数int table[24][21] {0};                     // 年历数组int month_day[12] {31,28,31,30,31,30,31,31,30,31,30,31}; // 每月上限天数i…

ubuntu14.04配置caffe

ubuntu 14.04 64bit 安装 请自行Google安装&#xff0c;并修改源。 cuda 7.5 安装 cuda7.5下载&#xff0c;选择ubuntu 14.04的deb包下载安装一些可能的依赖 sudo apt-get install linux-headers-$(uname -r) build-essential 安装cuda sudo dpkg –i cuda-repo-<distro>…

iOS开发API常用英语名词

iOS开发API常用英语名词 0. indicating 决定 1.in order to 以便 2.rectangle bounds 矩形尺寸 3.applied 应用 4.entirety 全部 5.technique 方法 6.truncating 截短 7.wrapping 换行 8.string 字符串 9.familiar style 简体 10.The styled text 主题样式 11.Constants 常量 …

Win10 IIS本地部署网站运行时图片和样式不正常?

后期会在博客首发更新&#xff1a;http://dnt.dkill.net 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 启用关闭win功能&#xff0c;开启一下静态内容 收工~

设置IIS会话过期时间

打开默认网站----双击ASP--展开会话属性---更改超时时间-转载于:https://www.cnblogs.com/genesis/p/4816128.html

89c51单片机汇编语言,AT89C2051时钟程序——MCS51单片机汇编程序

;; AT89C2051时钟程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定时器T0、T1溢出周期为50MS&#xff0c;T0为秒计数用&#xff0c; T1为调整时闪烁用&#xff0c;;P3.7为调整按钮&#xff0c;P1口 为字符输出口&#xff0c;采用共阳显示管。;;;;;;;;;;;;;;;;;;;;;;;;;;;;…

c语言结构体指针初始化

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 记得上周在饭桌上和同事讨论C语言的崛起时&#xff0c;讲到了内存管理方面 我说所有指…

WWDC 2013 Session笔记 - iOS7中弹簧式列表的制作

这是我的WWDC2013系列笔记中的一篇&#xff0c;完整的笔记列表请参看这篇总览。本文仅作为个人记录使用&#xff0c;也欢迎在许可协议范围内转载或使用&#xff0c;但是还烦请保留原文链接&#xff0c;谢谢您的理解合作。如果您觉得本站对您能有帮助&#xff0c;您可以使用RSS或…

H5学习之旅-H5列表(8)

列表的基本语法 ol&#xff1a;有序列表 ul&#xff1a;无序列表 li&#xff1a;列表项 dl&#xff1a;列表 dt&#xff1a;列表项 dd&#xff1a;列表描述 常用列表 1.无序列表&#xff1a;使用标签 ul&#xff0c;li 属性&#xff1a;disc&#xff08;默认实心圆&#xff09;…

c语言 文件夹是否纯真,C语言面试题大汇总之华为面试题(转)

1、局部变量能否和全局变量重名&#xff1f;答&#xff1a;能&#xff0c;局部会屏蔽全局。要用全局变量&#xff0c;需要使用 ":: "局部变量可以与全局变量同名&#xff0c;在函数内引用这个变量时&#xff0c;会用到同名的局部变量&#xff0c;而不会用到全局变量。…

virtual析构函数的作用?

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 大家知道&#xff0c;析构函数是为了在对象不被使用之后释放它的资源&#xff0c;虚函…

[codevs1039]数的划分

这一题实际上是组合数学里面的经典问题&#xff0c;跟第二类Stirling数有些相似。可以把一个数值为n的数看成n个小球&#xff0c;划分的份数k看作是k个盒子&#xff0c;那么本题的要求就是&#xff1a; 将n个小球放到k个盒子中&#xff0c;小球之间与盒子之间没有区别&#xff…

c语言中用文件处理数据,C语言文件处理 -C语言从文件中读写格式化数据

从图 1 所示的文件 fin.txt 中读取学生姓名、身高和体重&#xff0c;计算并显示它们的平均值&#xff0c;并且将显示结果保存到文件 fout.txt 中。图 1&#xff1a;输入输出文件示例C语言代码清单 1&#xff1a;读取学生姓名、身高和体重&#xff0c;计算并显示它们的平均值#in…

MySQL于ON DUPLICATE KEY UPDATE采用

今天我们做的推断插入用途MySQL于ON DUPLICATE KEY UPDATE。现在&#xff0c;Mark下面&#xff01;假设你想做的事&#xff0c;再有就是在数据库中插入数据没有数据、如果有数据更新数据&#xff0c;然后你可以选择ON DUPLICATE KEY UPDATE。 ON DUPLICATE KEY UPDATE可以在UNI…

C++中Static作用和使用方法

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 1、什么是static? static 是C中很常用的修饰符&#xff0c;它被用来控制变量的…