[英]How do I create multiple C++ threads without blocking the main thread using join()?
[英]How do I print in a new thread without threads interrupting lines? (particularly c++)
我已经在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::mutex
和boost::mutex::scoped_lock
,它们的工作方式相同,执行相同的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.