zoukankan      html  css  js  c++  java
  • C++ 11 笔记 (五) : std::thread

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

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

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

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

     1 void func1(std::string str)
     2 {
     3     for (int i = 0; i < 10; i++)
     4     {
     5         std::cout << str << std::endl;
     6     }
     7 }
     8 
     9 void func2()
    10 {
    11     for (int i = 0; i < 10; i++)
    12     {
    13         std::cout << "BBB" << std::endl;
    14     }
    15 }
    16 
    17 int main()
    18 {
    19     std::thread t1(func1, "AAA");
    20     std::thread t2(func2);
    21     t1.join();
    22     t2.join();
    23     return 0;
    24 }

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

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

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

    当然,还可以这样:

    1 std::thread t2([]{
    2     for (int i = 0; i < 10; i++)
    3     {
    4         std::cout << "BBB" << std::endl;
    5     }
    6 });

    跟大多数语言一样,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。

  • 相关阅读:
    For each db / table
    转---网络上来的,做一个数组样的结构
    JAVA 相关资料
    转--也不知是哪位大侠写的了
    T-SQL切割字符串方法小结 2
    OPENQUERY
    行集函数专题
    行列转换
    第一章 SQL基础
    解释型语言与编译型语言的区别
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3687293.html
Copyright © 2011-2022 走看看