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

在哪个网做免费网站好重庆网站模板建站公司

在哪个网做免费网站好,重庆网站模板建站公司,html底部友情链接代码,oss可以做网站根目录吗条件变量 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。例如一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这种情况就需要用到条件变量。…

条件变量

  • 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。
  • 例如一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这种情况就需要用到条件变量。

同步概念与竞态条件

  • 同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源从而有效避免饥饿问题,叫做同步
  • 竞态条件:因为时序问题,而导致程序异常,我们称之为竞态条件。在线程场景下,这种问题也不难理解。
  • 互斥保证了安全性,但保证安全性的同时不一定能够安全可靠,同步主要是在保证安全性的情况下令线程调度更加高效可靠

条件变量函数

条件变量是用来进行线程同步的特性,内部要维护调度队列。

初始化

int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);
// 参数:
// cond: 要初始化的条件变量
// attr: NULL

销毁

int pthread_cond_destroy(pthread_cond_t *cond)

等待条件满足

int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);
// 参数:
// cond: 要在这个条件变量上等待
// mutex: 互斥量,后面详细解释

唤醒等待

int pthread_cond_broadcast(pthread_cond_t *cond);//唤醒所有
int pthread_cond_signal(pthread_cond_t *cond);//唤醒一个

简单案例

  • 我们先使用PTHREAD_COND/MUTEX_INITIALIZER进行测试,对其他细节暂不追究
  • 然后将接口更改为使用pthread_cond_init/pthread_cond_destroy的方式,方便后续进行封装
#include <iostream>
#include <string.h>
#include <unistd.h>
#include <pthread.h>pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void *active( void *arg ) {std::string name = static_cast<const char*>(arg);while (true){pthread_mutex_lock(&mutex);pthread_cond_wait(&cond, &mutex);std::cout << name << " 活动..." << std::endl;pthread_mutex_unlock(&mutex);}
}int main( void ) {pthread_t t1, t2;pthread_create(&t1, NULL, active, (void*)"thread-1");pthread_create(&t2, NULL, active, (void*)"thread-2");sleep(3); // 可有可无,这里确保两个线程已经在运行while(true) {// 对比测试// pthread_cond_signal(&cond); // 唤醒一个线程pthread_cond_broadcast(&cond); // 唤醒所有线程sleep(1);}pthread_join(t1, NULL);pthread_join(t2, NULL);
}

运行结果示例

$./cond
thread-1 活动...
thread-2 活动...
thread-1 活动...
thread-2 活动...

条件变量使用规范

等待条件代码

pthread_mutex_lock(&mutex);
while (条件不满足)pthread_cond_wait(cond, mutex);
修改条件代码
pthread_mutex_unlock(&mutex);

给条件发送信号代码

pthread_mutex_lock(&mutex);
设置条件为真signal(cond);
pthread_mutex_unlock(&mutex);
http://www.dtcms.com/a/432694.html

相关文章:

  • ASP做购物网站视频温州网站推广外包
  • 2016wap网站开发语言相册网站建设目的
  • 网站建设wap站网站设计论文答辩问题及答案
  • 网站 繁体 jswordpress小程序怎么发布文章
  • 网站视频插件宁波seo优化项目
  • 内蒙古做网站公司五金塑胶 技术支持 东莞网站建设
  • 嘉定专业网站制作公司完成公司门户网站建设
  • 为iBizPLM构建`知识库导出`插件
  • 茌平网站建设wordpress定时发布失败处理
  • 做网站都去哪里找模板线下推广图片
  • 网站做收款要什么条件app 外包开发公司
  • 做公司网站图片算是商用吗达州设计公司
  • 网站建设原做网站网站代理赚钱吗
  • 网站网络推广方法wordpress cpu100%
  • 青岛网站建设服务公司网站上的格式用html怎么做
  • 阿里云对象存储做静态网站开发公司员工内部销售激励方案
  • 怎样做网站设计要交税吗济南软件开发外包公司
  • 怎么把网站上传到域名网站建设营业执照如何写
  • 做视频网站犯法吗wordpress怎么安装拖拽编辑软件
  • 如何免费让网站上线网站排名优化软件联系方式
  • BUUCTF [HarekazeCTF2019]baby_rop wp
  • Nestjs框架: 菜单Menu接口功能的开发和设计
  • 做网站放广告邢台市疾控中心
  • 速通ACM省铜第十九天 赋源码(SUMdamental Decomposition)
  • C语言字符函数和字符串函数+内存操作函数
  • 容桂营销网站建设如何做公司简介介绍
  • html5建设摄影网站意义网站建设如何推广
  • ai设计logo免费网站自助建站系统注册
  • 网站开发怎么自学开发app怎么赚钱
  • 网站外部链接合理建设外贸建站费用