• 并发编程(2)线程管理


    一、启动线程

    void do_something();
    std::thread t(do_something);

    注意t是创建的线程,do_something是函数对象,不要传入函数。提供的函数对象会复制到新线程的存储空间当中,函数对象的执行和调用都在线程的内存空间中进行。

    join(),detach()

    二、线程传参

        线程调用传参

    void f(int i,std::string const& s);
    std::thread t(f,3,"hello");
    

      注意线程初始化不会对舛讹的参数隐式转换,需要显式转换。

    三、转移线程所有权

       std::move()来转移线程所有权,转移后源线程将和执行线程没有关联。

    void some_function();
    void some_other_function();
    std::thread t1(some_function); // 1
    std::thread t2=std::move(t1); // 2
    t1=std::thread(some_other_function); // 3
    std::thread t3; // 4
    t3=std::move(t2); // 5
    t1=std::move(t3); // 6 赋值操作将使程序崩溃,T1已经有一个线程了。

    四、运行时决定线程数量

       std::thread::hardware_concurrency()这个函数将返回能同时并发在一个程序中的线程数量。例如,多核系统中,返回值可以是CPU核芯的数量。因为上下文频繁的切换会降低线程的性能,所以肯定不想启动的线程数多于硬件支持的线程数量。

  • 相关阅读:
    idea 访问https://start.spring.io失败
    torch.nn.Dropout()
    torch.utils.tensorboard
    PyTorch 环境配置及安装
    np.reshape()
    torch.utils.data
    np.sum()
    Pytorch model.train()、model.eval()
    np.squeeze
    Python 临时文件、目录的生成
  • 原文地址:https://www.cnblogs.com/huangfuyuan/p/9126295.html
Copyright © 2020-2023  润新知