【Note】C++11 std::thread 创建线程实例

4 篇文章 0 订阅
1 篇文章 0 订阅

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++ 锁icon-default.png?t=LA92https://blog.csdn.net/xy_cpp/article/details/81910513

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值