- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在 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
以相同的方式工作并做相同的事情。
关于c++ - 如何在没有线程中断行的情况下在新线程中打印? (特别是 C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415123/
我已经可以在其中输入一些附加文本了mydomain/wiki/Special:UserLogin。我添加了一句话: In order to apply for an account send an m
有人可以解释以下脚本输出背后的逻辑吗? import numpy if(numpy.dtype(numpy.float64) == None): print "Surprise!!!!" 谢谢
是我还是 gmail bulls**t?在 outlook/浏览器上,我的电子邮件是完美的,但在 gmail 上,2 个表之间有一个空间,为什么?!?图片:http://i.imgur.com/srJ
我是一名优秀的程序员,十分优秀!