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

织梦企业网站源码自动升级wordpress失败

织梦企业网站源码,自动升级wordpress失败,易语言如何做验证系统官方网站,郑州专业seo首选互斥与同步 一.线程的局部存储二.线程的分离三.互斥1.一些概念2.上锁3.锁的原理4.死锁 一.线程的局部存储 例子 可以看到全局变量是所有线程共享的#xff0c;如果我们想要每个线程都单独访问g_val怎么办呢#xff1f;其实我们可以在它前面加上__thread修饰。 这就相当于把g… 互斥与同步 一.线程的局部存储二.线程的分离三.互斥1.一些概念2.上锁3.锁的原理4.死锁 一.线程的局部存储 例子 可以看到全局变量是所有线程共享的如果我们想要每个线程都单独访问g_val怎么办呢其实我们可以在它前面加上__thread修饰。 这就相当于把g_val从全局变量去储存到了局部储存里。每个线程可以单独访问自己的g_val。注意__thread只能定义内置类型 二.线程的分离 默认情况下新创建的线程是joinable的线程退出后需要对其进行pthread_join操作否则无法释放资源从而造成系统泄漏。 如果不关心线程的返回值join是一种负担(因为它会阻塞我们的主线程)这个时候我们可以告诉系统当线程退出时自动释放线程资源。 这个函数在主函数和当前线程里都可以使用。 三.互斥 1.一些概念 临界资源多线程执行流共享的资源就叫做临界资源 临界区每个线程内部访问临界资源的代码就叫做临界区。 互斥任何时刻互斥保证有且只有一个执行流进入临界区访问临界资源通常对临界资源起保护作用。 原子性后面讨论如何实现不会被任何调度机制打断的操作该操作只有两态要么完成要么未完成。 大部分情况线程使用的数据都是局部变量变量的地址空间在线程栈空间内这种情况变量归属单个线程其他线程无法获得这种变量。 但有时候很多变量都需要在线程间共享这样的变量称为共享变量可以通过数据的共享完成线程之间的交互。 多个线程并发的操作共享变量会带来一些问题。 例如一个抢票系统 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include pthread.hint ticket100; void *route(void *arg) {char *id (char*)arg;while(1) {if (ticket0) {usleep(1000);printf(%s sells ticket:%d\n, id, ticket);ticket--;} else {break;}} } int main() {pthread_t t1, t2, t3, t4;pthread_create(t1, NULL, route, (void*)thread 1);pthread_create(t2, NULL, route, (void*)thread 2);pthread_create(t3, NULL, route, (void*)thread 3);pthread_create(t4, NULL, route, (void*)thread 4);pthread_join(t1, NULL);pthread_join(t2, NULL);pthread_join(t3, NULL);pthread_join(t4, NULL);return 0; }可以看到已经抢到了负数很明显是不符合实际的。这是因为在执行打印ticket操作时操作系统需要从CPU里读取ticket数据而当一个线程已经打印了ticket0后再执行了减减操作,ticket变为了-1将ticket的值再CPU里更新这时切换到了另一个线程而该线程又恰好正要执行打印ticket操作那么它从CPU里读取了数据打印出来就为了负数。 要解决以上问题需要做到三点 1.代码必须要有互斥行为当代码进入临界区执行时不允许其他线程进入该临界区。 2.如果多个线程同时要求执行临界区的代码并且临界区没有线程在执行那么只能允许一个线程进入该临界区。 3.如果线程不在临界区中执行那么该线程不能阻止其他线程进入临界区。要做到这三点本质上就是需要一把锁。Linux上提供的这把锁叫互斥量。 2.上锁 创建锁 调用函数时可能会出现以下情况 1.互斥量处于未锁状态该函数会将互斥量锁定同时返回成功 2.发起函数调用时其他线程已经锁定互斥量或者存在其他线程同时申请互斥量但没有竞争到互斥量那么pthread_ lock调用会陷入阻塞(执行流被挂起)等待互斥量解锁。 加锁 修改代码 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include pthread.h #include sched.hpthread_mutex_t mutexPTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;//初始化 int ticket100; void *route(void *arg) {char *id (char*)arg;while(1) {pthread_mutex_lock(mutex);//上锁if(ticket0) {usleep(1000);printf(%s sells ticket:%d\n, id, ticket);ticket--;pthread_mutex_unlock(mutex);//解锁} else {pthread_mutex_unlock(mutex);//解锁break;}} } int main() {pthread_t t1, t2, t3, t4;pthread_create(t1, NULL, route, (void*)thread 1);pthread_create(t2, NULL, route, (void*)thread 2);pthread_create(t3, NULL, route, (void*)thread 3);pthread_create(t4, NULL, route, (void*)thread 4);pthread_join(t1, NULL);pthread_join(t2, NULL);pthread_join(t3, NULL);pthread_join(t4, NULL);pthread_mutex_destroy(mutex);//销毁return 0; }我们发现票数问题得到了解决但是票全被一个线程抢走了这是怎么回事呢其实是由于不同线程对于锁的竞争能力是不同的这里当线程2释放锁后马上又去申请了锁导致锁一直被线程2拿着出现了线程饥饿问题。我们可以在外面加上sleep函数让每个线程释放锁后休息一段时间避免锁一直在某一个线程上。 3.锁的原理 经过上面的例子大家已经意识到单纯的 i 或者 i 都不是原子的有可能会有数据一致性问题。 为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的 总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。 现在我们把lock和unlock的伪代码改一下。 movb语句是把al寄存器置零。 xchgb语句就是把al寄存器里的数据交换与内存里的mutex(1)变量进行一次交换此时mutex就变为了0。注意mutex是所有线程共享也就是说其实1只有一份当第一个进程将mutex里的1交换走后后面的线程就无法拿到1也就是上锁了。 4.死锁 死锁是指在一组进程中的各个进程均占有不会释放的资源但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。 死锁的必要条件 互斥条件一个资源每次只能被一个执行流使用。 请求与保持条件一个执行流因请求资源而阻塞时对已获得的资源保持不放。 不剥夺条件:一个执行流已获得的资源在末使用完之前不能强行剥夺。 循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系。避免死锁 破坏死锁的四个必要条件。 加锁顺序一致。 避免锁未释放的场景。 资源一次性分配。
http://www.w-s-a.com/news/782941/

相关文章:

  • 网站策划怎么做内容旅游型网站建设
  • 东莞百度网站推广ppt模板免费下载的网站
  • 网站建设项目管理基本要求网站空间到期影响
  • 做奖杯的企业网站谁有推荐的网址
  • wordpress能做企业站吗wordpress收发邮件
  • 电子产品网站建设策划方案腾讯企业邮箱注册申请免费
  • 哪些网站可以免费做代码自己电脑做网站服务器广域网访问
  • 高端网站设计青海省教育厅门户网站学籍查询
  • 长春网站优化公司网站制作400哪家好
  • 县级门户网站建设的报告开发游戏的软件有哪些
  • 做电子商务的网站wordpress带会员中心
  • 网站域名不变网站可以从做吗网站建设步骤 文档
  • 网站建设中 gif互联网新项目在哪里找
  • 做外包网站猎头公司英文
  • 房屋结构自建设计 网站海淀教育互动平台
  • 网络营销比赛 营销型网站策划热门搜索关键词
  • 网站建设图片代码网络设计师工资
  • 福建网站开发适合交换友情链接的是
  • 企业门户网站建站内乡微网站开发
  • 在线做logo印章网站一般到哪个网站找数据库
  • 哪些网站做免费送东西的广告6郑州人流医院哪家好
  • 高端做网站哪家好sem技术培训
  • 网站做等保是按照什么定级别的做网站的资源哪里找
  • 免费建站网页无需登陆潍坊高端模板建站
  • 北京php网站建设软通动力外包值得去吗
  • 优酷 做视频网站还能成功吗光谷做网站推广哪家好
  • 培训学校网站建设方案网站开发方案设计
  • 网站开发分支结构外贸网站做推广
  • 海南省城乡建设厅网站首页济南网站建设百家号
  • wordpress 图片命名吗北京seo优化哪家公司好