• atomic


    原子指令:指cpu的执行单元,不会因其他信息被打断。

    多核编程注意点:

      race condition:多线程共同修改同一个cacheline

      ABA problem:一个线程两次读取一个cacheline值不变,但再第二次读取之前,有一个线程执行更改其值,执行其他工作,然后将其值改回来,欺骗第一个线程,值没发生变化

      memory fence:Memory barrier,现代cpu使用性能优化,可能会导致指令乱序执行。c++11 std::atomic提供支持

    thread 1
    p.init();
    ready= true;
    
    thread 2
    if (ready)
        p.do();
    //p.init()可能被cpu排序在ready=true后

      cacheline:变量按访问的规律排序,频繁访问变量应对齐cacheline,且尽量独立一个cacheline。或者各线程拥有TLS,在需要时再合并所有线程中的值

      spurious wakeup:在多线程情况下,一个条件变量似乎发出信号,但等待条件可能仍然为false

      wait-free:不管os如何调度线程,每个线程都始终在做有用的事

      lock-free:不管os如何调度线程,至少有一个线程在做有用的事

      mutex并不一定比wait-free或者lock-free慢,代码越多,时长就越长,mutex出现竞争时会使调用者睡眠,使拿到锁的那个线程可以很快独占完成一系列流程,总体吞吐可能反而高。mutex导致低性能往往是因为临界区过大(限制了并发度),或竞争过于激烈(上下文切换开销变得突出)

      

  • 相关阅读:
    用localeCompare实现中文排序
    点击一个链接同时打开两个页面
    汉字和Unicode编码互转
    javascript中document学习
    javascript页面表格排序
    JavaScript 仿LightBox内容显示效果
    JavaScript面向对象的简单介绍
    JavaScript键盘上下键的操作(选择)
    关于clientWidth、offsetWidth、clientHeight、offsetHeigh
    动态(按需)加载js和css文件
  • 原文地址:https://www.cnblogs.com/Call-C/p/8360237.html
Copyright © 2020-2023  润新知