1.多线程加锁
#include <mutex>
mutex mut;
mut.lock ();
mut.unlock ();
以下代码执行结果为200000000,证明没有发生val被一个线程获取处理还没写回的时候,被另一个线程读走。
如果不加锁,val的结果会是100000000到200000000之间的一个数。
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
int val;
mutex mut;
void icrement () {
for (int i = 0; i < 100000000; i++) {
mut.lock ();
val++;
mut.unlock ();
}
}
int main (int argc, char* argv []) {
//创建两个线程
thread t1 (icrement);
thread t2 (icrement);
//等待两个线程执行完毕
t1.join ();
t2.join ();
cout << val << endl;
return 0;
}
2.线程池
c++实现:(头文件)
https://github.com/progschj/ThreadPool
线程池原理:线程池采用预创建的技术,在应用程序启动之后,将立即创建一定数量的线程(N1),放入空闲队列中。这些线程都是处