c++ 11 之后有了标准的线程库:std::thread,项目中用到过这里记一下。
#include <iostream>
#include <thread>
#include <mutex>
// TestThread.hpp
class TestThread
{
public:
void init();
void threadA();
void threadB(int value);
};
// TestThread.cpp
std::mutex mutexA;
void TestThread::init()
{
int b = 9;
// 新产生的线程会调用threadA函数
std::thread thread_a(&TestThread::threadA);
// 新产生的线程会调用threadB函数, 传递参数b
std::thread thread_b(&TestThread::threadB,b);
//非阻塞
thread_a.detach();
/*
我们考虑变量生命周期的问题,尤其是线程是分离的情况下,给予线程参数的线程有可能提前退出而释放资源,导致持有参数对象的线程访问了已经销毁的资源,尤其是对于局部变量。
*/
sleep(2);
}
void TestThread::threadA()
{
mutexA.lock();
printf("threadA is called.");
mutexA.unlock();
}
void TestThread::threadB(int value)
{
printf("threadB value is : %d", value);
}
调用detach(),将当前线程对象所代表的执行实例与该线程对象分离,使得线程的执行可以单独进行。一旦线程执行完毕,它所分配的资源将会被释放
目标线程就成为了守护线程,驻留后台运行。当线程主函数执行完之后,线程就结束了,运行时库负责清理与该线程相关的资源。
std::lock_guard C11新互斥锁,留待补充
C++11线程中的几种锁_xy_cpp的博客-CSDN博客_c++ 锁https://blog.csdn.net/xy_cpp/article/details/81910513