设为首页 加入收藏

TOP

《C++并发编程实战》读书笔记(1):线程管控(二)
2023-09-09 10:25:34 】 浏览:132
Tags:程实战 程管控
ve(t3); //在这次转移之时,t1已经关联运行some_other_function的线程,因此std::thread的析构函数中会调用std::terminate(),终止整个程序。所以只要std::thread对象还在管控着一个线程,就不能简单地向它赋新值。

因为std::thread支持移动语义,所以只要容器同样知悉移动意图,就可以装载std::thread对象。因此我们可以写出下列代码,生成多个线程,然后等待它们运行完成。

void do_work(unsigned id);

void foo()
{
    std::vector<std::thread> threads;
    for (unsigned i = 0; i < 20; ++i)
    {
        threads.push_back(std::thread(do_work, i));
    }
    for (auto& entry : threads)
    {
        entry.join();
    }
}

4、识别线程

使用C++标准库的std::thread::hardware_concurrency()函数可以获取系统中逻辑处理器的数量。如果信息无法获取,该函数可能返回0。

线程ID的类型是std::thread::id,它有两种获取方法:

  • 在与线程关联的std::thread对象上调用成员函数get_id(),即可得到该线程的ID。如果std::thread对象没有关联任何执行线程,则调用get_id()返回的是按默认构造方式生成的std::thread::id对象,表示“线程不存在”。
  • 当前线程的ID可以通过调用std::this_thread::get_id()获取。

std::thread::id对象可以支持很多种操作:

  • 可随意进行复制操作或比较运算。
  • 可用作关联容器(std::setstd::mapstd::multisetstd::multimap)的键值,无序关联容器(std::unordered_setstd::unordered_mapstd::unordered_multisetstd::unordered_multimap)的键值,或用于排序。
  • 写到输出流,例如std::cout << std::this_thread::get_id();
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++系列三:QT初识2 下一篇《C++并发编程实战》读书笔记(3)..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目