场景
1.写普通的程序时, 经常会使用cout来做输出, 每个进程只有一个控制台, 如果多线程调用cout时会出状况吗?
2.之所以研究cout会不会在并发下调用有问题, 是因为曾经有一个bug的崩溃点正好在cout处.
3.参考vc++的说明, iostream库的对象在并发write时是不会有问题的,原因是加了临界区,看osfinifo.c. 以下是对vc++针对stl库的线程安全的说明.
注: 虽然标准库说了支持cout并发, 但是在vs2010里出现过 ioinfo *pio = _pioinfo(fh); 这个 pio 为NULL的情况, 导致崩溃. 所以标准库实现也有BUG, 建议还是别用cout做并发输出.
osfinfo.c
int __cdecl __lock_fhandle (
int fh
)
{
ioinfo *pio = _pioinfo(fh);
int retval=TRUE;
/*
* Make sure the lock has been initialized.
*/

本文探讨了C++标准库中的线程安全问题,特别是关于`cout`的并发写入和`shared_ptr`的使用。虽然`iostream`库声称支持并发写入,但存在潜在风险,建议避免在并发环境中使用`cout`。同时,多线程对不同`shared_ptr`对象的读写是线程安全的。
订阅专栏 解锁全文
2万+

被折叠的 条评论
为什么被折叠?



