前言
前面几部分都是讲的并发编程的一些理论知识,包括线程概念、互斥元的使用、异步线程的使用、原子类型等等。但是这都是纸面上的知识,还没有应用到实战上,而且关于并发还有一些设计技巧,比如
程序段1 // 无需独占
程序段2 // 访问内存空间
程序段3 // 打印到屏幕
有两种加锁方式
方式一: 方式二:
lock(); 程序段1
程序段1 lock();
程序段2 程序段2
程序段3 unlock();
程序段3
对于单线程程序来说这是无关紧要的,但是对于多线程来说则会差异很大。下面这个例子:
最小化锁粒度
mutex mu;
int sum = 0;
void fun_1() {
for (int i = 0; i < 100000; ++i) {
mu.lock();
sum ++;
mu.unlock();
}
}
void fun_2(){
mu.lock();
for (int i = 0; i < 100000; ++i) {
sum ++;
}
mu