gpt4 book ai didi

c++ - 为什么使用互斥锁从线程进行奇怪的打印

转载 作者:太空狗 更新时间:2023-10-29 23:49:05 36 4
gpt4 key购买 nike

<分区>

我认为这段代码(其中我使用互斥锁在线程之间进行同步)会优雅地打印从 0 到 10 的数字,连续打印 3 次。

#include <iostream>
#include <mutex>
#include <thread>

using namespace std;

struct A
{
void run()
{
lock_guard<mutex> l(mutex);
int i = 0;
while (i <= 10)
cout << "i = " << i++ << endl;
}

std::mutex mut;
};

int main()
{
A a;
thread t1(&A::run, &a);
thread t2(&A::run, &a);
thread t3(&A::run, &a);

t1.join();
t2.join();
t3.join();
}

但由于某种原因,输出的开头总是或多或少地损坏了。其余的有时还可以,有时则不行。所以,很明显,它不是同步的。这很奇怪,因为我预计当一个线程获得互斥锁时,没有其他线程会进入 run 方法的主体。但显然这不是真的。

i = i = 00i = 0

i = 1
i = 2
i = 3

谁能解释一下?

我想也许我需要用 std::ref 包围线程构造函数中的“a”对象,但是不,这没有帮助。

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com