volatile int i=0;
volatile用于不让编译器优化
1.
volatile int a;
a = 10;
// 让a被立即赋值为10,而不是等到之后用a时才给她赋值。
2.
volatile bool b = false
while (!b) {
// 不改变b的值的代码
}
// 如果不加volatile,编译器可能就只从内存中读取b的值1次 到寄存器,之后就不再读取了
分类: cplusplus
c++ 线程间的sharing data
mutex mtx;
1 直接调用mtx.lock、mtx.unlock 不如 lock(mtx),因为前者可能死锁
2 lock 、try_lock(mtx) 可以一次锁多个、保证不死锁,但try_lock有返回值用于判断是否成功。
3 try_lock(mtx)有时不如unique_lock lck(mtx),因为后者可以在lcx销毁时自动释放锁。unique_lock<mutex> lcx(mtx)这种构造会一直阻塞到锁住。
最佳实践是
mutex m1;
unique_lock<mutex> lcx(m1,std::defer_lock);
try_lock(lcx);