1)机器最大线程数
uint16_t max_thread = thread::hardware_concurrency();
2)vector中管理线程
获取线程id
a)thread::id _id=std::this_thread::get_id();
b)thread th(getSum_vector, ref(arr), ref(_sum));
cout << th.get_id();
容器中存储线程变量:使用emplace_back原位构造
a) vector
for (int i = 0; i < 2; i++)
{
_vector.emplace_back(getSum_vector, ref(arr), ref(_sum));
}
- std::thread
使用std::thread()创建线程对象
a)std::thread th(function,avg)
b)std::thread th(&class::function,,&类实例,avg)
c)std::thread th(std::bind(&class::function,,&类实例,avg))
d)std::thread th{{过程}}
如果function需要引用类型参数,则使用ref()
4)线程等待/分离
创建后需要手动join/detach
或使用RAII机制,在离开作用域时自动分离
class Thread_Guard {
public:
Thread_Guard(std::thread& _th):th(_th)
{
std::cout << "call";
}
~Thread_Guard()
{
if (th.joinable())
th.join();
else {
}
std::cout << "Thread_Guard diaoy endding" << std::endl;
}
private:
std::thread& th;
};
5)锁类型
std::lock_guardstd::mutex _guard
std::unique_lock独占锁
std::share_lock共享锁
std::scoped_lock (c++17)同时获得锁
6)锁
//同时加锁
std::mutex _mutex1;
std::mutex _mutex2;
//使用lock()同时加锁
std::lock(_mutex1, _mutex2);
std::lock_guardstd::mutex(_mutex1, std::adopt_lock);
std::lock_guardstd::mutex(_mutex2, std::adopt_lock);
//std::adopt_lock 是一个标记,告诉 std::lock_guard 它应该采用已经锁定的互斥锁,而不是再次尝试锁定它。
7)共享锁std::share_lock
场景:写操作需要独占锁。而读操作需要共享锁。
std::share_mutex(c++17),C++11标准没有共享互斥量,可以使用boost提供的boost::shared_mutex
8)层级锁,递归锁
标签:std,thread,lock,c++,vector,mutex,th,多线程 From: https://www.cnblogs.com/light-LifeClub/p/18424334