C++:模板类和静态成员变量
当一个模板类产生不同的类时,每个类产生的对象共享static变量,静态成员变量作用于类层面
C++杂谈笔记
左值和右值
左值的英文简写为“lvalue”,右值的英文简写为“rvalue”。很多人认为它们分别是"left value"、“right value” 的缩写,其实不然。lvalue 是“loactor value”的缩写,可意为存储在内存中、有明确存储地址(可寻址)的数据,而 rvalue 译为 “read value”,指的是那些可以提供数据值的数据(不一定可以寻址,例如存储于寄存器中的数据)。
12345678910111213141516171819202122232425262728// 左值引用int num = 10;int &b = num; // 正确int &c = 10; // 错误 int num = 10;const int &b = num; // 正确const int &c = 10; // 正确 // 右值引用int num = 10;//int && a = num; // 错误,右值引用不能初始化为左值int && a = 10 ...
Codelet调度模型与Swdarts
Codelet是一种针对E级计算机的需求而进行设计的细粒度并行、事件驱动的程序执行模型。
C++智能指针:shared_ptr
C++引入智能指针,可用于动态资源管理,资源即对象的管理策略。
C++:explicit
C++ explicit关键字详解。
树状数组理解
又称二叉索引树,使得查询区间和与修改的时间复杂度将为O(logn)
SWSPH - 论文阅读笔记
SWSPH-A Massively Parallel SPH Implementation for Hundred-Billion-Particle Simulation on New Sunway Supercomputer
C++11:原子操作与memory_order
原子操作
概念
原子操作是多线程程序中"最小且不可并行化"的操作。通常对一个共享资源的操作是原子操作的话,意味着多个线程访问该资源时,有且仅有唯一一个线程在对这个资源进行操作。
通常情况下,原子操作通过"互斥"(mutual exclusive)的访问来保证。实现互斥通常需要平台相关的特殊指令,在c++11标准之前,这常常意味着需要在c/c++代码中嵌入内联汇编代码。
问题
123456789101112131415161718192021222324252627282930313233343536#include <pthread.h>#include <iostream>using namespace std; static long long total=0;pthread_mutex_t m=PTHREAD_MUTEX_INITIALIZER; void* func(void*){ long long i; for(i=0;i<100000000;i++) { ...
Compare And Swap(CAS)原理分析
compare and swap,解决多线程并行情况下使用锁造成性能损耗的一种机制
自旋锁
同步资源,切换线程,让两个或以上的线程同时并行执行,后面请求锁的线程不放弃CPU的执行时间,看看持有锁的线程是否很快就会释放锁。