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

做期货看资讯什么网站好微网站 底部导航菜单

做期货看资讯什么网站好,微网站 底部导航菜单,注册公司流程视频,外贸生意做哪个网站好目录 1 线程同步的引入 2 条件变量线程同步竞争条件的概念 3 条件变量相关函数 初始化 销毁 等待条件满足 唤醒等待 4 demo代码——理解条件变量线程同步 5 为什么 pthread_cond_wait 需要互斥量? 6 条件变量使用规范 1 线程同步的引入 例子生活化线程同步竞争条件的概念 3 条件变量相关函数 初始化 销毁 等待条件满足 唤醒等待 4 demo代码——理解条件变量线程同步 5 为什么 pthread_cond_wait 需要互斥量? 6 条件变量使用规范 1 线程同步的引入 例子生活化 学校里有一间VIP自习室只能让一个人在里面自习为了保护使用者自习不被他人所打扰配备以一把锁。张三是一个勤奋的学生为了抢到VIP自习室的使用权凌晨六点就已经到达了自习室开始了自习并将自习室给锁上了。后面陆续过来的人就只能在自习室外面等待。某个时刻张三想要上厕所为了不让别人在此期间进入自习室出门的时候反手就把门给锁上了所以在张三上厕所的期间张三自习室里面自己的学习资料就可得到很好的保护起来。第一个阶段多线程访问临界资源的加锁保护做到了互斥张三上完厕所回来了继续之前的自习活动。过了一会张三由于没有吃早饭肚子开始饿了起来打算结束自习状态去吃东西。所以张三离开自习室刚刚放下钥匙的时候心里又想着吃完饭回来就可能要等待自习室的了觉得不好所以想要回去自习。由于钥匙和张三此时离的很近之前等待钥匙的人离钥匙较远所以此时竞争钥匙的时候张三的竞争力大又重新拿到了钥匙。所以其他人只能继续等待。接着张三用钥匙开启了VIP自习室的门刚把门锁上张三的肚子又饿了起来又重复了之前的动作。由于食物的资源在未来的一段时间里面都无法到达所以张三就一直在重复着锁与解锁的动作没有进入学习的状态而别人也没有得到锁的机会从而也无法学习。第二阶段多线程按照规则锁与解锁没错但是不合理后来校方发现了VIP自习室的这个不合理的地方就规定了自习完毕的人归还完钥匙之后不能立即申请钥匙锁而必须重新排队在外面人也要进行等待排队。——在安全的规则下多线程访问资源具有一定的顺序性为了合理解决饥饿问题提出了线程同步让多线程协同工作 2 条件变量线程同步竞争条件的概念 条件变量 当一个线程互斥地访问某个变量时它可能发现在其它线程改变状态之前它什么也做不了。例如一个线程访问队列时发现队列为空它只能等待只到其它线程将一个节点添加到队列中。这种情况就需要用到条件变量。同步在保证数据安全的前提下让线程能够按照某种特定的顺序访问临界资源从而有效避免饥饿问题叫做同步竞态条件因为时序问题而导致程序异常我们称之为竞态条件。在线程场景下这种问题也不难理解 3 条件变量相关函数 初始化 int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);         参数                  cond要初始化的条件变量                  attrNULL条件变脸的属性 销毁 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);//唤醒条件队列中的一个线程 4 demo代码——理解条件变量线程同步 【解锁操作可以在任意一个线程中进行】 pthread_mutex_t mutexPTHREAD_MUTEX_INITIALIZER; void* PthreadRoutine(void* args) {const char* namestatic_castconst char*(args);while(true){pthread_mutex_lock(mutex);coutname runendl;} } int main() {pthread_t t[4];for(int i0;i4;i){char* namenew char[64];snprintf(name,64,thread-%d,i1);pthread_create(ti,nullptr,PthreadRoutine,name);}while(true){pthread_mutex_unlock(mutex);//解锁操作可以在任意一个线程中进行sleep(1);}for(int i0;i4;i){pthread_join(t[i],nullptr);}return 0; } 【条件变量的使用】 #include iostreamusing namespace std;#include unistd.h #include pthread.hpthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond PTHREAD_COND_INITIALIZER;void *PthreadRoutine(void *args) {const char *name static_castconst char *(args);while (true){pthread_mutex_lock(mutex);pthread_cond_wait(cond, mutex); // 挂起等待等待某个条件满足等待其它线程唤醒该线程cout name run endl;pthread_mutex_unlock(mutex);} } int main() {pthread_t t[4];for (int i 0; i 4; i){char *name new char[64];snprintf(name, 64, thread-%d, i 1);pthread_create(t i, nullptr, PthreadRoutine, name);}sleep(3);while (true){pthread_cond_signal(cond); // 唤醒一个线程sleep(1);}for (int i 0; i 4; i){pthread_join(t[i], nullptr);}return 0; } 5 为什么 pthread_cond_wait 需要互斥量? 条件等待是线程间同步的一种手段如果只有一个线程条件不满足一直等下去都不会满足所以必须要有一个线程通过某些操作改变共享变量使原先不满足的条件变得满足并且友好的通知等待在条件变量上的线程。条件不会无缘无故的突然变得满足了必然会牵扯到共享数据的变化。所以一定要用互斥锁来保护。没有互斥锁就无法安全的获取和修改共享数据。  按照上面的说法我们设计出如下的代码先上锁发现条件不满足解锁然后等待在条件变量上不就行了如下代码:  // 错误的设计 pthread_mutex_lock(mutex); while (condition_is_false) {         pthread_mutex_unlock(mutex);         //解锁之后等待之前条件可能已经满足信号已经发出但是该信号可能被错过         pthread_cond_wait(cond);         pthread_mutex_lock(mutex); } pthread_mutex_unlock(mutex); 由于解锁和等待不是原子操作。调用解锁之后 pthread_cond_wait 之前如果已经有其他线程获取到互斥量摒弃条件满足发送了信号那么 pthread_cond_wait 将错过这个信号可能会导致线程永远阻塞在这个 pthread_cond_wait 。所以解锁和等待必须是一个原子操作。int pthread_cond_wait(pthread_cond_ t *cond,pthread_mutex_ t * mutex); 进入该函数后会去看条件量等于0不等于就把互斥量变成1直到cond_ wait返回把条件量改成1把互斥量恢复成原样。 6 条件变量使用规范 等待条件代码 pthread_mutex_lock(mutex); while (条件为假//细节解除等待的时候判断条件是否满足确保解除等待后任何时候条件都是满足的         pthread_cond_wait(cond, mutex); 修改条件 pthread_mutex_unlock(mutex); 给条件发送信号代码 pthread_mutex_lock(mutex); 设置条件为真 pthread_cond_signal(cond); pthread_mutex_unlock(mutex);
http://www.huolong8.cn/news/479076/

相关文章:

  • 一款非常不错的seo网站优化公司源码物流公司简介模板
  • 个人网站可以做推广吗苏州建站方法
  • 网站seo策划方案正能量网站下载
  • 中华建设网算什么级别网站微网站开发难吗
  • 专业制作彩铃网站建设网站要准备什么
  • 烟台网站建设多少钱视频推广方式
  • 做 在线观看免费网站郑州做网站加密的公司
  • 建设单位网站经费请示网站开发 弹窗
  • 如何上传ftp网站程序网站开发工作描述
  • 河南省城乡建设信息网南京谷歌优化
  • 网站建设的优势与不足淘宝关键词排名怎么查
  • 做网站都用什么工具宁波网站设计公司有几家
  • 做网站需要源码吗移动端网站建设的好处
  • 广告公司做的网站图片侵权企业营销网站的建设
  • 深圳网站见做网站怎么购买主机
  • 商城网站规划泉州网站公司建站
  • 杭州认证网站建设wordpress菜单栏菜单简介
  • 温州多语言网站建设泉州惠安网站建设
  • 各行各业网站建设网站备案密码重置
  • 网站的主机选择wordpress多站模式
  • 凡科怎么做网站秦皇岛市网站建设
  • 嘉兴品牌网站设计如何构建一个网站
  • 给网站做推广代理服务器地址是什么
  • iis7.5添加php网站小程序开发公司怎么选
  • wordpress企业网站教程婚庆公司一条龙一般多少钱
  • 广西城乡建设部网站国内好的crm系统
  • 教育类php开源网站广州网页设计制作
  • php手机网站开发工具wordpress后台密码
  • 外贸推广建站蓝颜seo牛正邦设计公司
  • 做网站运营需要有什么能力青海汽车网站建设