c++11 condition_variable(条件变量)和读写锁(boost::share_mutex)

目录
  1. condtion_variable

condtion_variable

标准C++库提供了两个条件变量的实现:std::condition_variable和std::condition_variable_any。两者都需要和互斥元一起工作,以便提供恰当的同步。
以std::condition_variable为例,使用方法(以生产者消费者模型为例)如下:

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
std:mutex _mutex;
std::condition_variable data_cond;
std::queue<data_chunk> data_queue;
void producer()
{
while(1)
{
data_chunk const data = prepare_data();
std::lock_guard(std::mutex) lg(_mutex);
data_queue.push(data);
data_cond.notify_one();
}
}
void comsumer()
{
while(1)
{
std::unique_lock<std::mutex> uk(_mutex); //condition_variable should be used with unique_lock
data_cond.wait(uk, []{return !data_queue.empty();})
//after wake up
data_chunk data=data_queue.front();
data_queue.pop();
uk.unlock();
process(data);
}
}

#share_mutex
对于写操作,使用std::lock_guard和std::unique_lock加写锁,进行独占访问。
对于读操作,使用boost::shared_lock 加读锁,允许多个读者同时进行读取。

本站总访问量