public member function
<condition_variable>

std::condition_variable_any::notify_one

void notify_one() noexcept;
通知一个线程
解除阻塞当前等待此条件的线程中的一个。

如果没有线程等待,则函数不执行任何操作。

如果有多个线程,则未指定哪个线程被选中。

参数



返回值



示例

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
41
42
43
44
// condition_variable_any::notify_one
#include <iostream>           // std::cout
#include <thread>             // std::thread
#include <mutex>              // std::mutex
#include <condition_variable> // std::condition_variable_any

std::mutex mtx;
std::condition_variable_any cv;

int cargo = 0;     // shared value by producers and consumers

void consumer () {
  mtx.lock();
  while (cargo==0) cv.wait(mtx);
  std::cout << cargo << '\n';
  cargo=0;
  mtx.unlock();
}

void producer (int id) {
  mtx.lock();
  cargo = id;
  cv.notify_one();
  mtx.unlock();
}

int main ()
{
  std::thread consumers[10],producers[10];

  // spawn 10 consumers and 10 producers:
  for (int i=0; i<10; ++i) {
    consumers[i] = std::thread(consumer);
    producers[i] = std::thread(producer,i+1);
  }

  // join them back:
  for (int i=0; i<10; ++i) {
    producers[i].join();
    consumers[i].join();
  }

  return 0;
}

可能的输出(消耗的货物的顺序可能不同)

1
2
3
4
5
6
7
8
9
10


数据竞争

无数据竞争(原子操作)。
对象的原子操作按单个总顺序进行排序。

异常安全

无异常保证: 绝不抛出异常。

另见