小编Igo*_*r37的帖子

std :: lock_guard有什么问题

我有简单的代码:第一线推std::stringsstd::list,及第二线程弹出std::stringsstd::list.所有std::list的操作都受到保护std::mutex m.此代码将错误永久打印到控制台:"Error: lst.begin() == lst.end()".

如果我替换std::lock_guard为构造m.lock(),m.unlock()代码开始正常工作.有什么问题std::lock_guard

#include <iostream>
#include <thread>
#include <mutex>
#include <list>
#include <string>

std::mutex m;
std::list<std::string> lst;

void f2()
{
    for (int i = 0; i < 5000; ++i)
    {
        std::lock_guard<std::mutex> { m };
        lst.push_back(std::to_string(i));
    }

    m.lock();
    lst.push_back("-1"); // last list's element
    m.unlock();
}

void f1()
{
    std::string str;

    while (true)
    {
        m.lock();
        if (!lst.empty()) …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++11

5
推荐指数
1
解决办法
686
查看次数

标签 统计

c++ ×1

c++11 ×1

multithreading ×1