当前位置: 首页 > news >正文

泰州模板建站源码网页制作与网站建设实战大全

泰州模板建站源码,网页制作与网站建设实战大全,知识付费网站制作,58同城做网站要钱吗文章目录 前言一、为什么要线程同步#xff1f;二、线程同步pthread_cond_initpthread_cond_destroypthread_cond_wait、pthread_cond_signal和 pthread_cond_broadcast 三、示例代码 前言 上节课学习了线程互斥#xff0c;这节课针对线程互斥内容在做进一步的补充和完善二、线程同步pthread_cond_initpthread_cond_destroypthread_cond_wait、pthread_cond_signal和 pthread_cond_broadcast 三、示例代码 前言 上节课学习了线程互斥这节课针对线程互斥内容在做进一步的补充和完善学习线程同步的概念。 提示以下是本篇文章正文内容下面案例可供参考 一、为什么要线程同步 上一章我们所讲的线程互斥有一个问题虽然我们有互斥锁但是当我们的临界资源条件不满足时我们就需要不断重复申请锁和释放锁的过程做无用功浪费系统和cpu资源所以针对此问题我们就引入了线程同步来解决。 线程同步其本质就是告诉其他线程什么时候我们的临界资源已经准备就绪可以开始运行如果没有准备就绪那么就阻塞。 这样就能很大程度上节约我们的系统资源。 二、线程同步 pthread_cond_init man 3 pthread_cond_init #include pthread.h int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr); pthread_cond_t cond PTHREAD_COND_INITIALIZER; 该函数与pthread_mutex_init 使用类似当pthread_cond是全局或静态变量时可以使用PTHREAD_COND_INITIALIZER来进行初始化。 pthread_cond_destroy 该函数与pthread_mutex_init 使用类似当pthread_cond是全局或静态变量时不需要调用此函数进行销毁。 pthread_cond_wait、pthread_cond_signal和 pthread_cond_broadcast #include pthread.h int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex) #include pthread.h int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_signal(pthread_cond_t *cond); pthread_cond_signal和 pthread_cond_broadcast 这两个函数都是用与告诉需要被同步的线程条件已经满足你你们可以运行了。 它们俩的区别就是pthread_cond_signal一次只能一个线程可以运行而pthread_cond_broadcast则是可以一次若干个线程按次序运行。 pthread_cond_wait函数是用于判断条件是否满足如果不满足则阻塞。 三、示例代码 需要注意的是cond也要配合mutex来进行使用他们两个是很有关联的。 代码如下示例 #include iostream #include pthread.h #include unistd.h #include cstdio#define TNUM 5volatile bool quit false; //防止编译器过度优化typedef void (*Func_t)(std::string, pthread_mutex_t *, pthread_cond_t *);void ThreadFunc1(std::string name, pthread_mutex_t *mutex, pthread_cond_t *cond) {while (!quit){pthread_mutex_lock(mutex);pthread_cond_wait(cond, mutex);if (!quit/*临界资源条件判断*/)std::cout name : 查看 std::endl;pthread_mutex_unlock(mutex);} }void ThreadFunc2(std::string name, pthread_mutex_t *mutex, pthread_cond_t *cond) {while (!quit){pthread_mutex_lock(mutex);pthread_cond_wait(cond, mutex);if (!quit/*临界资源条件判断*/)std::cout name : 保存 std::endl;pthread_mutex_unlock(mutex);} }void ThreadFunc3(std::string name, pthread_mutex_t *mutex, pthread_cond_t *cond) {while (!quit){pthread_mutex_lock(mutex);pthread_cond_wait(cond, mutex);if (!quit/*临界资源条件判断*/)std::cout name : 读取 std::endl;pthread_mutex_unlock(mutex);} }void ThreadFunc4(std::string name, pthread_mutex_t *mutex, pthread_cond_t *cond) {while (!quit){pthread_mutex_lock(mutex);pthread_cond_wait(cond, mutex);if (!quit/*临界资源条件判断*/)std::cout name : 打印 std::endl;pthread_mutex_unlock(mutex);} }void ThreadFunc5(std::string name, pthread_mutex_t *mutex, pthread_cond_t *cond) {while (!quit){pthread_mutex_lock(mutex);pthread_cond_wait(cond, mutex);if (!quit/*临界资源条件判断*/)std::cout name : 切换 std::endl;pthread_mutex_unlock(mutex);} }class Data { public:Data(std::string name, Func_t func, pthread_mutex_t *mutex, pthread_cond_t *cond): _name(name), _func(func), _mutex(mutex), _cond(cond){}public:std::string _name;Func_t _func;pthread_mutex_t *_mutex;pthread_cond_t *_cond; };void *Total(void *args) {Data *cont (Data *)args;cont-_func(cont-_name, cont-_mutex, cont-_cond);delete cont;return nullptr; }int main() {pthread_mutex_t mutex;pthread_cond_t cond;pthread_mutex_init(mutex, nullptr);pthread_cond_init(cond, nullptr);pthread_t tids[TNUM];Func_t funcs[TNUM] {ThreadFunc1, ThreadFunc2, ThreadFunc3, ThreadFunc4, ThreadFunc5};for (int i 0; i TNUM; i){std::string name New thread ;name std::to_string(i 1);Data *cont new Data(name, funcs[i], mutex, cond);pthread_create(tids i, nullptr, Total, (void *)cont);}int count 10;sleep(5);while (count){std::cout conut : count-- ----------- std::endl;pthread_cond_signal(cond);// pthread_cond_broadcast(cond);sleep(1);}quit true;pthread_cond_broadcast(cond);for (int i 0; i TNUM; i){pthread_join(tids[1], nullptr);std::cout New thread i 1 has quit. std::endl;}pthread_mutex_destroy(mutex);pthread_cond_destroy(cond);return 0; }
http://www.pierceye.com/news/911725/

相关文章:

  • 网站木马文件删除青岛黄岛网站建设公司电话
  • 一个网站做网站地图的目的企业网站建设框架图
  • 网站建设 swot分析深圳市龙华区繁华吗
  • h5 小米网站模板直接通过ip访问网站
  • 公司建设个网站制作装饰公司网站
  • 高质量的网站内容建设做网站信科网站建设
  • 网站建设倒计时模板学校室内设计效果图
  • 海东营销网站建设公司东莞网络优化排名
  • 株洲网站建设服务建筑公司怎么注册
  • 心理学网站的建设网站开发公司比较有名
  • 需要做网站设计海南网页制作
  • 开发网站有什么用仿站小工具官网
  • 支付宝网站登录入口个人微信公众号如何推广
  • 北京网站制作net2006常见的营销型网站
  • 设计建设网站公司天津市建设信息网官网
  • 企业网站建站 费用比较有名的个人网站
  • 网站规划与开发设计企业班组建设案例
  • 招聘网站开发设计做网站 免费字体
  • 网站上传程序流程桐城住房和城乡建设局网站
  • 回力网站建设初衷ps可以做网站吗
  • 广州网站建设市场佛山专业做网站公司哪家好
  • 四川省凉亭建设工程有限公司网站的博客wordpress
  • 搭建一个网站需要多少钱?如何做网站二级域名
  • 广德县住房和城乡建设网站wordpress网站维护教程
  • 在网站上显示地图金湖县网站建设
  • 网站域名区别吗模板和网站是一体的吗
  • 百度网盟推广怎么选择投放网站抖音seo代理
  • 电商wordpress网站优化百度
  • phpcms v9 网站搬家南通网站设计专家
  • 延安网站建设推广黄骅市网站建设价格