std::cout和printf
来源:互联网 发布:知乎每日精选 知乎日报 编辑:程序博客网 时间:2024/05/18 15:08
禁止std::cout和printf混用,在多线程环境下可能导致coredump。
说明:printf和std::cout分别为标准c语言与c++中的函数,两者的缓冲区机制不同(printf无缓冲区,而std::cout有),而且对于标准输出的加锁时机也略不同:
(1)printf:在对标准输出作任何处理前先加锁。
(2)std::cout:在实际向标准输出打印时方才加锁。
两者存在微弱的时序差别,而多线程环境下,很多问题就是由于微弱的时序差别造成的。所以两者的混用很容易带来不可预知的错误,常见的错误有打印输出的结果不符合预期,而严重错误时甚至会导致内部缓冲区溢出,导致coredump。
例如:
void Nocomplaint()
{
int j=0;
for(j=0;j<5;j++)
{
cout << "j=";
printf("%d\n",j);
}
}
上面代码的输出结果可能为:1 2 3 4 j=j=j=j=j=
造成这样的错误的原因就是std::cout的标准流输出时带有缓冲区的,如果没有及时清理缓冲区而在期间采用了其他系统的输出函数。可能会暴露两种输出函数的不兼容性,从而出现非预期错误。
- std::cout和printf
- cout和printf
- cout和printf机制
- cout和std::cout的区别
- C++,cout和std::cout的区别
- std::cout和std::endl是什么意思?
- cout和std::cou区别
- cout和printf的混用
- printf和cout的区别
- printf()和cout的区别
- cout和printf的区别
- float printf 和cout 疑问
- printf和cout的速度
- cout和printf的区别
- cout和printf的区别
- cout 和 printf 性能比较
- Android如何打印std::cout/printf(重定向stdout)
- cout 和 printf 输出先后问题
- 服务器“推”技术
- cloudfoundry 2.0 on CentOS 6 小结
- 十个JDBC的最佳实践
- Android Bluetooth
- warden及平台安全
- std::cout和printf
- RMAN Restore Database Slow / How To Improve RMAN Restore Performance [ID 467694.1]
- 黑马程序员:Java基础总结----异常
- 外网访问虚拟机MYSQL
- GitHub上最火的前端开源项目列表
- JavaScript新手教程之JSON的使用全解
- 字符串转为数字
- 利用VBA编程制作互动效果的PPT
- 九度笔记之 调整数组顺序使奇数位于偶数前面