1. atomic_int

Untitled

  1. int value(0) vector<int> labels_size(label); vector(int nSize):创建一个vector,元素个数为nSize

Differences between default(int) vs int = 0

  1. auto

    1. 当你想要拷贝range的元素时,使用for(auto x : range).
    2. 当你想要修改range的元素时,使用for(auto && x : range).
    3. 当你想要只读range的元素时,使用for(const auto & x : range).
  2. size_t

    1. 例如:bitset的size操作返回bitset对象中二进制位中1的个数,返回值类型是size_t。

      例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。vector使用的下标实际也是size_t,源码是typedef size_t size_type。

  3. std::lock_guard<std::mutex> lock(g_mutex); 1.

    直接使用 std::mutex 的成員函式 lock/unlock 來上鎖是可以的,只是要注意 lock 要有對應的 unlock ,一旦沒有解鎖到程式很可能就會發生死鎖,

    那有沒有比較智慧的寫法來避免這種忘記解鎖而照成死鎖的問題發生呢?

    有的!答案就是配合 std::lock_guard 使用,學會用 std::lock_guard 就可以避免手動上鎖解鎖,進而減少在寫程式上出現死鎖的機會,

    lock_guard 利用生命週期這概念來進行上鎖與解鎖,lock_guard 本身並不管理 mutex 的生命週期,也就是 lock_guard 生命週期結束不代表 mutex 生命週期也結束,

  4. long tmpbool = (x >= 0 && x < width) && (y >= ymin && y < ymax); if(__builtin_expect(tmpbool, 1)){

    这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器。这个指令的写法为:

    __builtin_expect(EXP, N)
    

    意思是:EXP==N的概率很大。

  5. setprecision输出流对象设置浮点数精度。

  6. MPI_Cart_coords 域划分

  7. _mm_malloc对齐

为什么要使用_mm_malloc? (与_aligned_malloc,alligned_alloc或posix_memalign相对) - Thinbug