您当前的位置: 首页 >  ar

鱼儿-1226

暂无认证

  • 0浏览

    0关注

    1100博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++11并行编程-条件变量(condition_variable

鱼儿-1226 发布时间:2021-09-01 11:28:26 ,浏览量:0

头文件主要包含有类和函数相关的条件变量。

包括相关类 std::condition_variable和 std::condition_variable_any,还有枚举类型std::cv_status。另外还包含函数 std::notify_all_at_thread_exit(),以下分别介绍一下以上几种类型。

std::condition_variable 类介绍

std::condition_variable是条件变量,很多其它有关条件变量的定义參考维基百科。Linux下使用 Pthread库中的 pthread_cond_*() 函数提供了与条件变量相关的功能, Windows 则參考 MSDN

当 std::condition_variable对象的某个wait 函数被调用的时候,它使用 std::unique_lock(通过 std::mutex) 来锁住当前线程。

当前线程会一直被堵塞。直到另外一个线程在同样的 std::condition_variable 对象上调用了 notification 函数来唤醒当前线程。

std::condition_variable 对象通常使用 std::unique_lock 来等待,假设须要使用另外的 lockable 类型,能够使用std::condition_variable_any类。本文后面会讲到 std::condition_variable_any 的使用方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

#include                 // std::cout

#include                 // std::thread

#include                 // std::mutex, std::unique_lock

#include     // std::condition_variable

std::mutex mtx; // 全局相互排斥锁.

std::condition_variable cv; // 全局条件变量.

bool ready = false// 全局标志位.

void do_print_id(int id)

{

    std::unique_lock lck(mtx);

    while (!ready) // 假设标志位不为 true, 则等待...

        cv.wait(lck); // 当前线程被堵塞, 当全局标志位变为 true 之后,

    // 线程被唤醒, 继续往下运行打印线程编号id.

    std::cout

关注
打赏
1604459285
查看更多评论
0.0466s