这真是一个巨大的话题。我猜记录完善绝B需要一本书的容量。

所以。。我只是略有了解,等以后用的深入了再慢慢补充吧。

C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boost库的pthread,对比一下感觉Java和C#的多线程真好用。。

在C++11中,标准库又添加了std::thread这个好用的线程库,基本就是boost的pthread演化来的,用法也差不多。所以先举个简单的例子:

 void func1(std::string str)
{
for (int i = ; i < ; i++)
{
std::cout << str << std::endl;
}
} void func2()
{
for (int i = ; i < ; i++)
{
std::cout << "BBB" << std::endl;
}
} int main()
{
std::thread t1(func1, "AAA");
std::thread t2(func2);
t1.join();
t2.join();
return ;
}

这样就会同时输出“AAA”和“BBB”了。

另外,t1还可以写成这样:

 std::thread t1(std::bind(func1, "AAA"));

当然,还可以这样:

 std::thread t2([]{
for (int i = ; i < ; i++)
{
std::cout << "BBB" << std::endl;
}
});

跟大多数语言一样,join是等待子线程结束,主线程会阻塞。相对应的还有detach,作用是托管线程,跟主线程各自执行。

还有两个常用的成员函数:

get_id  ——获取线程 ID。
joinable  ——检查线程是否可被 join。

还有互斥量,直译就可以了:

mutex 互斥量
timed_mutex 超时互斥量
recursive_mutex 递归互斥量
recursive_timed_mutex 递归超时互斥量

互斥量的常用成员函数:

lock    获取锁

trylock    尝试获取锁

unlock    释放锁

try_lock_for    在一定时间范围内尝试获取锁(有超时功能的mutex才能用)

try_lock_until    尝试获取锁到某个时间点位置(有超时功能的mutex才能用)

类似Java的Lock类和C#的lock。

C++ 11 笔记 (五) : std::thread的更多相关文章

  1. C++11并发之std::thread<转>

    最近技术上没什么大的收获,也是悲催的路过~ 搞一点新东西压压惊吧! C++11并发之std::thread 知识链接: C++11 并发之std::mutex C++11 并发之std::atomic ...

  2. C++11 并发指南------std::thread 详解

    参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...

  3. C++11并发——多线程std::thread (一)

    https://www.cnblogs.com/haippy/p/3284540.html 与 C++11 多线程相关的头文件 C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是< ...

  4. c++11并发之std::thread

    知识链接: https://www.cnblogs.com/lidabo/p/7852033.html 构造函数如下: ) thread() noexcept; initialization() te ...

  5. c++11中关于std::thread的join的思考

    c++中关于std::thread的join的思考 std::thread是c++11新引入的线程标准库,通过其可以方便的编写与平台无关的多线程程序,虽然对比针对平台来定制化多线程库会使性能达到最大, ...

  6. C++11 并发之std::thread std::mutex

    https://www.cnblogs.com/whlook/p/6573659.html (https://www.cnblogs.com/lidabo/p/7852033.html) C++:线程 ...

  7. c++11中关于`std::thread`线程传参的思考

    关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...

  8. C++11并发之std::mutex

    知识链接: C++11并发之std::thread   本文概要: 1. 头文件. 2.std::mutex. 3.std::recursive_mutex. 4.std::time_mutex. 5 ...

  9. C++11 并发指南五(std::condition_variable 详解)

    前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...

随机推荐

  1. Android - Shared Preference (分享首选项) 具体解释

    Shared Preference (分享首选项) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24454963 Sh ...

  2. [Angular 2] ROUTING IN ANGULAR 2 REVISITED

    Let's say we have a list of contacts, click each contact, we can render a new route to get the detai ...

  3. iotop,pt-ioprofile : mysql IO负载高的来源定位

    http://www.cnblogs.com/cenalulu/archive/2013/04/12/3016714.html 前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(i ...

  4. beaglebone-black 在Angstrom系统中的网络配置方法

    Beaglebone Linux 101: Assigning a Static IP Address with Connman Posted on February 6, 2012 by dwatt ...

  5. asp.net下载的方法1

    1. 首先新建一个用于进行下载处理的page页,如download.aspx,里面什么东西也没有. 2. 添加一个DownloadHandler类,它继承于IHttpHandler接口,可以用来自定义 ...

  6. 请列出你在从事IT生涯中,最难以忘怀的一次误操作

    IT系统最怕什么,我觉得就两点: 1.不可靠的软硬件. 2.误操作. 第一点就不用解释了,第二点是该文的内容,主要摘选自ITPUB的精华贴——[精华] 请列出你在从事DBA生涯中,最难以忘怀的一次误操 ...

  7. FxCop

    下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=8279 FxCop是一个代码分析工具,和StyleCop(代码规范)一起配合 ...

  8. 11.13 noip模拟试题

    题目名称 笔记 括号 城堡可执行文件名 note brackets castle输入文件名 note.in brackets.in castle.in输出文件名 note.in brackets.ou ...

  9. Linq 与UnitOfWork

    submitchages(linq to sql)或者savechanges(ef)的次数是根据你操作方法的数量决定的,也即是:它只认识自己的提交语句(submtchanges,savechanges ...

  10. CentOS 6.4安装OpenOffice

    终端依次输入: (1)sudo yum install openoffice.org-writer (2) sudo  yum install openoffice.org-calc (3) sudo ...