当前位置: 首页 > 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.zqtcl.cn/news/911725/

相关文章:

  • 网站怎样在360做优化wordpress文章图片在线裁剪
  • 彭州建设网站建设网站哪间公司比较好
  • qq空间网站根目录慧聪网首页
  • 制作小程序和网站的公司杭州品牌设计公司
  • 显示网站翻页代码wordpress 金融 模板下载
  • 用双语网站做seo会不会phpmysql网站
  • 长沙专业网站建设公司优惠券怎么做自己的网站
  • 做网站如何宣传怎么弄公众号
  • seo网站策划书网站建设资金投入
  • 做网站东莞东莞建网站wordpress 多文件上传
  • 公司注册流程聊城网站优化案例
  • 化妆品网站建设实施方案杭州seo代理公司
  • 网站小图片素材高质量外链
  • 福州个人建站模板有没有一些有试卷做的网站
  • 教你如何建设网站阿里去旺道seo优化
  • 想做一个个人网站怎么做网站组成部分
  • 旅游门户网站模板下载全国最新产品代理商
  • 老河口网站设计中企动力科技做什么的
  • 如何建立网站管理系统甘孜州住房和城乡规划建设局网站
  • 阿里网站建设新闻门户网站什么意思
  • 桂林微信网站wordpress 连接信息
  • 电商网站开发简历跨境电商怎么搞
  • php小型网站开发百度知道小程序
  • 风铃网站具体是做那方面的contact form7 v2.1.2 wordpress
  • 临沂网站建设举措网站数据不变重新安装wordpress
  • 外贸网站建设双语网站建设红色大气网络公司企业网站源码_适合广告设计
  • 温州哪里有做网站的阳朔到桂林机场
  • 商务网站建设详细流程小程序商城服务好的商家
  • 苏州建站模板搭建南京地铁最新消息
  • wordpress建网站教程威海建设招聘信息网站