详细文档:https://zh.cppreference.com/w/cpp/thread/thread/thread
线程的创建
1.使用函数与函数参数创建
2.使用类内成员函数创建线程则要传入(&::fun,&<对象>,参数)亦可以使用lambda表达式进行创建
detach()与join()
join()阻塞线程,直至该线程完成其执行。
detach()分离执行该线程,执行完成后释放资源。
*示例如下:
#include <iostream>
#include <thread>
#include <mutex>
#include <queue>
unsigned long sum = 0L;
std::mutex mu;
void fun(size_t num)
{
//lock_guard<mutex> lock(mu); //使用自解锁就可以线程安全啦
for (size_t i = 0; i < num; ++i)
sum++;
}
class A
{
public:
void push(const int& x)
{
_qu.push(x);
}
private:
std::queue<int32_t> _qu;
};
int main()
{
std::cout << "Before joining,sum = " << sum << std::endl;
std::thread t1(fun, 1000000); //需要注意的是传入的参数不能太小否则还未执行到下一条指令此线程就已经结束了,造成线程安全的假象
std::thread t2(fun, 1000000);
A a;
std::thread t3(&A::push, &a, 3);
std::thread t4([&]() {
a.push(4);
});
t1.join();
t2.join();
t3.detach();
t4.detach();
std::cout << "After joining,sum = " << sum << std::endl;
return 0;
}