为什么我的程序打印垃圾
Why is my program printing garbage?
我的代码:
#include <iostream>
#include <thread>
void function_1()
{
std::cout << "Thread t1 started!n";
for (int j=0; j>-100; j--) {
std::cout << "t1 says: " << j << "n";
}
}
int main()
{
std::thread t1(function_1); // t1 starts running
for (int i=0; i<100; i++) {
std::cout << "from main: " << i << "n";
}
t1.join(); // main thread waits for t1 to finish
return 0;
}
我创建了一个thread
,它按递减顺序打印数字,而main
按递增顺序打印。
此处为输出示例。为什么我的代码打印是垃圾?
两个线程同时输出,从而扰乱您的输出。打印部分需要某种线程同步机制。
有关使用std::mutex
与std::lock_guard
组合作为cout
的示例,请参见此答案。
这不是"垃圾"—这是你要求的输出!它只是一团糟,因为您总共使用了零同步机制来防止单个std::cout << ... << std::endl
行(非原子)被其他线程中的类似行(仍然不是原子)中断。
传统上,我们会在每一行周围锁定一个互斥锁。
相关文章:
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 程序打印 % 后预期输出
- c ++控制台应用程序,如何在控制台外部打印字符
- 如何打印源文件中与 GDB 中的程序流关联的所有行号
- 此程序不会打印整个字符串
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 问题导致程序停止响应,并且姓氏未正确打印
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 该程序没有产生输出,而是卡在一个循环中,几秒钟后消失并打印被杀死?
- 每(n)秒打印一次的程序
- 如何编写一个程序来打印特定基数的前N个数字
- 我的C++程序如何访问计算机的日期和时间以打印和使用当前年份?
- 为什么如果我从键盘输入EOF克里昂不要在运行窗口打印程序的输出?
- 随机打印程序,尽管 sleep() 功能,一次打印多个输出
- 基本的控制台打印程序
- C++中的向量:为什么这个简单的复制和打印程序出现这么多错误?