gpt4 book ai didi

c++ - 如何在没有线程中断行的情况下在新线程中打印? (特别是 C++)

转载 作者:行者123 更新时间:2023-11-28 00:21:05 25 4
gpt4 key购买 nike

我已经在 Linux 上使用 C 语言进行了相当多的线程处理,现在我正在尝试做同样的事情,但在 Windows 上使用 C++,但我在打印到标准输出时遇到了问题。在线程执行的函数中我有:

void print_number(void* x){
int num = *(static_cast<int*> (x));
std::cout << "The number is " << num << std::endl;
}

包裹在一个创建三个线程的循环中。问题是尽管所有内容都被打印出来,线程似乎在每个“<<”之间相互中断。

比如我上次运行的时候得到了

The number is The number is 2The number is 3
1

当我希望每个都在单独的行上时。我猜每个线程都能够在另一个线程在“<<”之间写入单个部分后写入标准输出。在 C 中,这不是问题,因为在我需要写入的所有内容都存在之前,缓冲区不会被刷新,但现在我认为情况并非如此。这是需要互斥锁的情况吗?

最佳答案

在 C++ 中,我们首先更喜欢将参数作为 int*。然后,我们可以锁定。在 C++11 中:

std::mutex mtx; // somewhere, in case you have other print functions 
// that you want to control

void print_number(int* num) {
std::unique_lock<std::mutex> lk{mtx}; // RAII. Unlocks when lk goes out of scope
std::cout << "The number is " << *num << std::endl;
}

如果不是 C++11,还有 boost::mutexboost::mutex::scoped_lock 以相同的方式工作并做相同的事情。

关于c++ - 如何在没有线程中断行的情况下在新线程中打印? (特别是 C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415123/

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