条件变量的这种用法是错误的吗?

时间:2018-05-06 03:19:38

标签: c++ multithreading concurrency condition-variable

C ++ Concurrency in Action 的第6章中,它实现了一个线程安全的队列。 Here是完整的代码。但我发现使用条件变量可能有问题。

stringstream ss;
ss << choice;
vector <string> broken;

string word;
while(ss >> word){
    broken.push_back(word);
}

消费部分锁定 std::unique_lock<std::mutex> wait_for_data() { std::unique_lock<std::mutex> head_lock(head_mutex); data_cond.wait(head_lock, [&] {return head.get() != queue::get_tail(); }); return std::move(head_lock); } void push(T new_value) { std::shared_ptr<T> new_data( std::make_shared<T>(std::move(new_value))); std::unique_ptr<node> p(new node); { std::lock_guard<std::mutex> tail_lock(tail_mutex); tail->data = new_data; node *const new_tail = p.get(); tail->next = std::move(p); tail = new_tail; } data_cond.notify_one(); } ,但生成部分锁定head_mutex,可能导致消费者错过通知。我好吗?

0 个答案:

没有答案