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

做博客网站什么空间好制定网站建设规划书

做博客网站什么空间好,制定网站建设规划书,横沥仿做网站,wordpress博客源码目录 一、什么是死锁 死锁的四个必要条件 如何避免死锁 避免死锁算法 二、Linux线程同步 三 、条件变量 1、条件变量基本原理 2、条件变量的使用 3、条件变量使用示例 为什么 pthread_cond_wait 需要互斥量? 一、什么是死锁 死锁是计算机科学中的一个概念#xff0c;…目录 一、什么是死锁 死锁的四个必要条件 如何避免死锁 避免死锁算法 二、Linux线程同步 三 、条件变量 1、条件变量基本原理 2、条件变量的使用 3、条件变量使用示例 为什么 pthread_cond_wait 需要互斥量? 一、什么是死锁 死锁是计算机科学中的一个概念特别是在操作系统和多线程编程领域中经常遇到。它指的是两个或两个以上的进程或线程在执行过程中由于互相等待对方持有的资源而无法继续执行的状态。具体来说每个进程都已经占有了某些资源但还需要额外的、目前被其他进程所占有的资源才能继续执行。这样所有涉及的进程都进入了等待状态形成了一个相互依赖的循环如果没有外部干预它们将永远等待下去无法自行解除阻塞状态。 死锁的四个必要条件 互斥条件一个资源每次只能被一个执行流使用 请求与保持条件一个执行流因请求资源而阻塞时对已获得的资源保持不放 不剥夺条件:一个执行流已获得的资源在末使用完之前不能强行剥夺 循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系 如何避免死锁 破坏死锁的四个必要条件破坏其中之一即可 加锁顺序一致 避免锁未释放的场景 资源一次性分配 避免死锁算法 死锁检测算法 是一种动态检测系统中是否已经发生死锁的方法。它不需要事先采取措施去预防死锁而是允许系统运行并定期检查是否有死锁的存在。基本思想是构造一个资源分配图或称作前驱图在这个图中节点代表进程和资源边表示分配关系和请求关系。如果图中存在环路则表示系统处于死锁状态。具体步骤包括 构建资源分配图图中的节点分为两类一类代表进程另一类代表资源类型。从每个进程节点出发的边指向它已分配的资源节点从每个资源节点出发的边指向请求该资源的进程节点。 检测环路使用拓扑排序或深度优先搜索等算法检测图中是否存在环。如果存在环则说明有进程等待的资源被其他在环中的进程所占有形成死锁。 处理死锁一旦检测到死锁系统可以选择采取不同的策略来解决比如终止某些进程、回滚进程状态或强制释放资源等。 银行家算法 是一种避免死锁的策略而不是检测死锁。它通过预判分配资源的行为是否安全来避免系统进入不安全状态从而防止死锁发生。算法核心包括以下几个步骤 初始化记录系统中所有可用资源的数量以及每个进程对各类资源的最大需求、已分配资源和当前还需要的资源。 安全性检查算法在每次分配资源之前会先检查这次分配是否会导致系统进入不安全状态。这通过试探性地分配资源然后检查是否存在一个安全序列即所有进程能够按照某种顺序完成执行而不会发生某个进程因为缺少资源而无法继续的情况。 资源分配只有当试探性分配后系统仍处于安全状态时才会真正分配资源给请求的进程。 资源回收当进程完成任务后必须归还所有分配给它的资源以便其他进程可以使用。 银行家算法的核心在于其预防机制确保了即使在资源有限的情况下系统也能保证进程按照某种顺序安全地执行完毕避免了死锁的发生。 二、Linux线程同步 在Linux环境下条件变量是线程同步的一种机制用于实现线程间的协作使得一个线程能够等待某个条件变为真而另一个线程负责改变这个条件并通知等待的线程。条件变量通常与互斥锁一起使用以确保在检查条件和修改条件时的原子性和一致性。 同步概念 同步Synchronization是指在多线程或多进程环境中协调不同执行单元的操作顺序确保它们按照预定的方式执行以避免数据不一致或逻辑错误的问题。同步机制确保了对共享资源的访问是有序的避免了竞态条件的出现。 竞态条件 竞态条件Race Condition是指在多线程程序中多个线程对同一块数据进行非同步的访问和修改其最终结果取决于线程的调度顺序。由于线程执行的交错可能会导致数据不一致、计算错误或者程序行为不符合预期。 三 、条件变量 1、条件变量基本原理 等待条件当一个线程发现某个条件不满足时它可以调用pthread_cond_wait()函数这会自动释放它之前锁定的互斥锁并使线程进入等待状态直到其他线程通过信号机制唤醒它。此时线程会重新尝试获取互斥锁并检查条件是否满足如果不满足则可能再次进入等待状态。 发送信号当另一个线程改变了条件变量相关的状态并希望唤醒等待的线程时它会调用pthread_cond_signal()或pthread_cond_broadcast()函数。pthread_cond_signal()会唤醒一个等待该条件变量的线程如果有多个线程在等待则选择其中一个而pthread_cond_broadcast()会唤醒所有等待该条件的线程。 2、条件变量的使用 初始化条件变量可以通过静态初始化或者动态初始化来创建条件变量。 静态初始化使用PTHREAD_COND_INITIALIZER宏 动态初始化则使用pthread_cond_init()函数。 int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr); 参数 cond要初始化的条件变量 attrNULL 锁定互斥锁在检查或修改条件之前线程需要先获取互斥锁以确保操作的原子性和互斥性。 检查条件线程检查条件是否满足如果不满足则调用pthread_cond_wait()进入等待状态。 int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex); 参数 cond要在这个条件变量上等待 mutex互斥量后面详细解释 改变条件在另一个线程中当条件改变后应先锁定相同的互斥锁改变条件然后调用pthread_cond_signal()或pthread_cond_broadcast()来唤醒等待线程。 int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_signal(pthread_cond_t *cond); 解锁互斥锁无论是在调用pthread_cond_wait()前后还是在改变条件之后都需要正确地解锁互斥锁。 清理不再使用条件变量时动态初始化的条件变量需要通过pthread_cond_destroy()函数进行清理。 int pthread_cond_destroy(pthread_cond_t *cond) 3、条件变量使用示例 使用条件变量pthread_cond_t和互斥锁pthread_mutex_t的经典示例实现了线程间的简单同步。使得线程2与线程1交替打印。 代码示例 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include pthread.h pthread_cond_t cond; pthread_mutex_t mutex; void *r1(void *arg) {while (1){pthread_cond_wait(cond,mutex);printf(我是线程1\n);} } void *r2(void *arg) {while (1){printf(我是线程2\n);pthread_cond_signal(cond);sleep(1);} } int main(void) {pthread_t t1, t2;pthread_cond_init(cond, NULL);pthread_mutex_init(mutex, NULL);pthread_create(t1, NULL, r1, NULL);pthread_create(t2, NULL, r2, NULL);pthread_join(t1, NULL);pthread_join(t2, NULL);pthread_mutex_destroy(mutex);pthread_cond_destroy(cond); } r1函数作为线程1的入口点它在一个无限循环中调用pthread_cond_wait(cond, mutex)。这意味着线程1会释放互斥锁mutex并阻塞直到其他线程通过pthread_cond_signal或pthread_cond_broadcast唤醒它。一旦被唤醒它会重新获取互斥锁并打印消息“我是线程1”。 r2函数作为线程2的入口点在其循环中打印“我是线程2”随后调用pthread_cond_signal(cond)来唤醒一个等待在cond上的线程在这种情况下通常是线程1。之后sleep(1)让线程2暂停1秒模拟工作与同步的间隔。 运行结果 为什么 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_mutex_unlock(mutex);和pthread_cond_wait(cond);之间其他线程改变了条件并调用了pthread_cond_signal或pthread_cond_broadcast那么这个信号可能会被错过。因为pthread_cond_wait实际上是在调用时才检查是否应该唤醒线程而这时线程可能已经错过了信号。 竞态条件在解锁互斥锁后检查条件然后等待这期间其他线程可能又修改了条件状态导致线程可能在不应该等待的情况下进入等待状态或者即使条件已经满足仍然进入等待。 由于解锁和等待不是原子操作。调用解锁之后 pthread_cond_wait 之前如果已经有其他线程获取到互斥量摒弃条件满足发送了信号那么 pthread_cond_wait 将错过这个信号可能会导致线程永远阻塞在这个 pthread_cond_wait 。所以解锁和等待必须是一个原子操作。 正确的做法是将条件检查放在pthread_cond_wait内部确保在检查条件和等待之间不会错过任何信号。  等待条件代码 pthread_mutex_lock(mutex); while (condition_is_false) { // 条件检查放在循环内pthread_cond_wait(cond, mutex); // 等待时保持互斥锁锁定 } // 当条件满足时会从pthread_cond_wait返回 pthread_mutex_unlock(mutex); 给条件发送信号代码 pthread_mutex_lock(mutex); 设置条件为真 pthread_cond_signal(cond); pthread_mutex_unlock(mutex); 这样的设计确保了当线程准备等待时如果条件已经满足可能是由于其他线程的操作它不会错过这一事实并且可以直接继续执行避免了信号丢失和不必要的等待。 条件变量和互斥锁的正确配合使用对于避免死锁、竞态条件和信号丢失至关重要。始终遵循“在持有锁的情况下检查条件然后等待”的原则确保线程安全和高效的同步。
文章转载自:
http://www.morning.lznfl.cn.gov.cn.lznfl.cn
http://www.morning.rxxdk.cn.gov.cn.rxxdk.cn
http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn
http://www.morning.zlgbx.cn.gov.cn.zlgbx.cn
http://www.morning.c7512.cn.gov.cn.c7512.cn
http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn
http://www.morning.ywgrr.cn.gov.cn.ywgrr.cn
http://www.morning.rhsr.cn.gov.cn.rhsr.cn
http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn
http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn
http://www.morning.hghhy.cn.gov.cn.hghhy.cn
http://www.morning.ntzfl.cn.gov.cn.ntzfl.cn
http://www.morning.jzccn.cn.gov.cn.jzccn.cn
http://www.morning.lktjj.cn.gov.cn.lktjj.cn
http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn
http://www.morning.kqnwy.cn.gov.cn.kqnwy.cn
http://www.morning.kpwdt.cn.gov.cn.kpwdt.cn
http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn
http://www.morning.rjhts.cn.gov.cn.rjhts.cn
http://www.morning.gjxr.cn.gov.cn.gjxr.cn
http://www.morning.dpzcc.cn.gov.cn.dpzcc.cn
http://www.morning.mzrqj.cn.gov.cn.mzrqj.cn
http://www.morning.txgjx.cn.gov.cn.txgjx.cn
http://www.morning.bwjgb.cn.gov.cn.bwjgb.cn
http://www.morning.mnccq.cn.gov.cn.mnccq.cn
http://www.morning.lhygbh.com.gov.cn.lhygbh.com
http://www.morning.pljxz.cn.gov.cn.pljxz.cn
http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn
http://www.morning.hqzmz.cn.gov.cn.hqzmz.cn
http://www.morning.mcqhb.cn.gov.cn.mcqhb.cn
http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn
http://www.morning.qrqg.cn.gov.cn.qrqg.cn
http://www.morning.kysport1102.cn.gov.cn.kysport1102.cn
http://www.morning.jqsyp.cn.gov.cn.jqsyp.cn
http://www.morning.wbyqy.cn.gov.cn.wbyqy.cn
http://www.morning.xshkh.cn.gov.cn.xshkh.cn
http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn
http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn
http://www.morning.ytmx.cn.gov.cn.ytmx.cn
http://www.morning.gjsjt.cn.gov.cn.gjsjt.cn
http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn
http://www.morning.ftsmg.com.gov.cn.ftsmg.com
http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn
http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn
http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn
http://www.morning.xwzsq.cn.gov.cn.xwzsq.cn
http://www.morning.pttrs.cn.gov.cn.pttrs.cn
http://www.morning.ldzss.cn.gov.cn.ldzss.cn
http://www.morning.fdrch.cn.gov.cn.fdrch.cn
http://www.morning.tmnyj.cn.gov.cn.tmnyj.cn
http://www.morning.nnjq.cn.gov.cn.nnjq.cn
http://www.morning.zzhqs.cn.gov.cn.zzhqs.cn
http://www.morning.kzdgz.cn.gov.cn.kzdgz.cn
http://www.morning.lqljj.cn.gov.cn.lqljj.cn
http://www.morning.qjtbt.cn.gov.cn.qjtbt.cn
http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn
http://www.morning.neletea.com.gov.cn.neletea.com
http://www.morning.ypbp.cn.gov.cn.ypbp.cn
http://www.morning.wfttq.cn.gov.cn.wfttq.cn
http://www.morning.xrwtk.cn.gov.cn.xrwtk.cn
http://www.morning.wklmj.cn.gov.cn.wklmj.cn
http://www.morning.tfkqc.cn.gov.cn.tfkqc.cn
http://www.morning.0small.cn.gov.cn.0small.cn
http://www.morning.dthyq.cn.gov.cn.dthyq.cn
http://www.morning.ljpqy.cn.gov.cn.ljpqy.cn
http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn
http://www.morning.yslfn.cn.gov.cn.yslfn.cn
http://www.morning.qmsbr.cn.gov.cn.qmsbr.cn
http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn
http://www.morning.srrrz.cn.gov.cn.srrrz.cn
http://www.morning.yjdql.cn.gov.cn.yjdql.cn
http://www.morning.tsyny.cn.gov.cn.tsyny.cn
http://www.morning.wqfzx.cn.gov.cn.wqfzx.cn
http://www.morning.qzxb.cn.gov.cn.qzxb.cn
http://www.morning.fksyq.cn.gov.cn.fksyq.cn
http://www.morning.kzhxy.cn.gov.cn.kzhxy.cn
http://www.morning.pcshb.cn.gov.cn.pcshb.cn
http://www.morning.qjxkx.cn.gov.cn.qjxkx.cn
http://www.morning.txtzr.cn.gov.cn.txtzr.cn
http://www.morning.rlxg.cn.gov.cn.rlxg.cn
http://www.tj-hxxt.cn/news/278980.html

相关文章:

  • 什么样的网站才是好网站适合网站开发工程师的公司
  • php的网站有哪些wordpress php 文件
  • 电商导购网站怎么做淄博网站建设好的公司
  • 问题反馈的网站怎么做山亭 网站建设
  • 做网站用什么工具七台河网站制作
  • 百度收录怎么弄百度seo怎么做
  • 官网站内优化怎么做酒楼网站模板
  • 构建html5博客网站影视制作
  • 自己给别人做网站挣钱吗不同类型的网站
  • 微信小程序下单怎么弄商家班级优化大师电脑版
  • 廊坊做网站厂商定制昆明小程序开发公司电话
  • 湛江公司做网站网站建设和前端开发的区别
  • 网站建设预付款如何付淘宝做网站的公司
  • 房地产网站建设公司erp是什么系统软件
  • 大连做网站优化哪里网页建设便宜
  • 网站后台设计教程视频seo论坛
  • 亚马逊站外推广网站岳阳网站开发网站运营哪家好
  • 广州网站建设定制多少钱免费行情网站app斗印
  • 做网站申请完空间后下一步干啥台州网站的优化
  • 镇江网站制作咨询高校招生网站建设
  • 微信官网下载安装网站推广优化服务
  • 网站建设和咨询服务合同网站前台登陆页面怎么改
  • 农家乐网站 建设烟台网站建设 58
  • wordpress建站指南手机建站平台淘客
  • 好的交互设计网站vps搭建wordpress个人
  • 网站搭建的外贸用什么网站开发客户
  • 有哪些做婚礼平面设计的网站有哪些类似小红书网站开发费用
  • 网站二维码怎么制作室内设计公司职位
  • 企业网站托管一个月多少钱上海工商网上注册大厅
  • 网站开发合作协议网站怎么加二级域名