文档章节

C++ std::thread

y
 yepanl
发布于 09/21 00:26
字数 623
阅读 8
收藏 0

        C++11提供了std::thread类来表示一个多线程对象。

    1,首先介绍一下std::this_thread命名空间:

        (1)std::this_thread::get_id():返回当前线程id

        (2)std::this_thread::yield():用户接口,当前线程主动放弃CPU,调度其他线程运行。

        (3)std::this_thread::sleep_for():使得当前线程休眠指定的时间。

        (4)std::this_thread::sleep_util():当前线程休眠,直到指定的绝对时间。

    2,std::thread:

        (1)构造函数:thread():默认构造函数,构造线程对象,但不包含可运行实例。

                                  thread(Fn&&, Args&&...):构造可运行线程对象,并运行Fn(Args&&...),其中Args&&...是Fn的可变参数列表。

                                  thread(thread &&x):移动构造函数,将线程对象x的可运行实例移动到调用线程对象中,x不再可运行。

        (2)移动赋值运算符:operator=(thread &&rhs):将右值线程对象rhs的可运行实例移动到调用线程对象中,rhs对象随即销毁。

        (3)joinable():如果一个线程是可执行的,就说这个线程是joinable.

                                    例如,使用默认构造函数thread()构造的线程对象是不可运行的,也就是不可joinable。

                                    或者,一个可joinable的线程对象,被move掉可运行实例(如,通过移动赋值运算符)之后,也变成了不可joinable。

                                    再或者,一个线程被detach后,该线程也是不可joinable。

        (4)join():等待回收退出的子线程的僵尸。

        (5)get_id():返回线程对象的id。

        (6)detach():默认情况下,子线程是附属在主线程中的,当子线程退出后,会向主线程发送子线程退出信号,主线程收到该信号后,回收子线程残留的僵尸进程。当子线程调用detach()方法后,该子线程就脱离了主线程的控制,在子线程退出后,子线程资源自动被系统回收(linux中是被init进程回收)。因此,调用了detach的子线程在主线程中是不可joinable的。

        多线程比较简单,示例不再列举。在实际的编码过程中,需要重点关注的是线程间资源的同步,可以使用atomic,mutex,condition variable等锁来实现资源同步。

© 著作权归作者所有

共有 人打赏支持
y
粉丝 0
博文 51
码字总数 33563
作品 0
南京
程序员
OpenMP并行程序设计——for循环并行化详解

这篇OpenMP的for循环使用已经很详尽了,而且例子很好,就转载了,不再自己另开篇博客。 感谢作者。 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/40018735 在C/C++...

sirius_0
04/23
0
0
关键词: 和

关键词:< iostream > 和 < iostream.h > 你写程序的时候,用< iostream >还是< iostream.h >? 你知道它们有什么区别么?还是认为他们根本就是一样的? 下面听我给你吹(文中纯属个人言论,...

AlphaJay
2010/06/21
0
0
C++11中once_flag,call_once实现分析

本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。 在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅...

横云断岭
2014/06/22
0
0
C++基础教程之C/C++区别

C/C++基础教程之C/C++区别 这是C++教程得第一步,后续会持续更新哦!欢迎新手(具有C基础),老鸟可绕道,可指导。 C++标准输入和输出 C++标准输入和输出分别是cin和cout,用法非常简单 cin>>n...

这个人很懒什么都没留下
09/01
0
0
C++ string的trim, split方法

很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法: 1.使用strin...

simpower
2015/08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
34分钟前
1
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
2
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
25
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
2
0
emoji

前言:随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富。emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编...

HeroHY
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部