文档章节

C++ std::thread

y
 yepanl
发布于 09/21 00:26
字数 623
阅读 11
收藏 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等锁来实现资源同步。

© 著作权归作者所有

共有 人打赏支持
上一篇: C++ 锁
y
粉丝 0
博文 56
码字总数 55172
作品 0
南京
程序员
私信 提问
c++-gtk-utils 2.2.5 发布,轻量级 C++ 类库

c++-gtk-utils 2.2.5 发布,此版本更新内容如下: 添加了 Extension::exec() 函数,在 C++ 程序中运行 guile scheme 扩展 添加了新的Thread::TaskManager 方法,用来异步运行 std::packagaed...

oschina
2014/01/26
443
1
GCC  4.4.1 发布在即,C++ 0x 标准支持大幅进步

请注意,以下所有特性都需要在命令行指定 或 来启用!! GCC 4.4 相对于 4.3 版最大的变化就是对 C++ 0x 标准支持有了大幅提升(当然,还有很多其他方面的改变,不过我个人比较关注 C++),已支...

红薯
2009/04/24
2.2K
0
OpenMP并行程序设计——for循环并行化详解

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

sirius_0
04/23
0
0
关于 《C++并发编程指南》的一些想法

小伙伴们大家好, 最近几天我被小伙伴的热情惊呆了,感谢大家的热烈讨论,看来大家都是高手,很多人水平也比我高,我做过多的评价也不合适,我自己也说了,这本“书”(如果你把它看做是书的...

大卷卷
2013/09/11
7.9K
97
C++11中once_flag,call_once实现分析

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

横云断岭
2014/06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis学习(1)

JDBC连接方式: 1.底层没有使用连接池,操作数据库需要频繁的创建和关闭连接,消耗资源。 2.写原生的JDBC代码在JAVA中,一旦需要修改SQL的话(比如表增加字段),JAVA需要整体重新编译,不利...

杨健-YJ
28分钟前
1
0
怎么组织文档

可以从以下几个方面考虑组织文档: ☐ 各种分支的界面截图和对应的类及文件 ☐ 框架或类图 ☐ 流程图 ☐ 时序图 ☐ 注意事项

-___-
39分钟前
2
0
分布式之数据库和缓存双写一致性方案解析

引言 为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更...

别打我会飞
41分钟前
9
0
我的oracle11G,12c OCM之路

ocm认证感悟 ---------------------- 距离拿到ocm证书已经过了1年的时间,当初拿到证书的心情到现在还记得。其实在每个DBA心里都有一个成为强者的梦想,需要被认可,我也一样。我干过开发,做...

hnairdb
42分钟前
2
1
手动部署kubernetes集群(1.13.1最新版)

一、机器规划 使用五台机子部署k8s集群,规划如下: master节点3台(同时也是etcd节点) node节点2台 ip分配如下: ip:192.168.10.101,主机名:k8s-etcd01 ip:192.168.10.102,主机名:k8s...

人在艹木中
47分钟前
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部