C++ 什么时候做c++;流对象使用互斥锁?
在对此的答复中,ovanes指出: 请注意 boost::词法转换比 阿托伊。我也经常用它来做广告 性能非关键代码。这个 词法转换的问题在于 使用stringstream进行转换。如果 您正在多线程环境中工作 Environment从 标准库将在互斥锁上使用锁 对于插入的每个字符, 即使流对象是从 一条线。你的号码是多少 17个字符中的一个将涉及17个互斥 投入流时锁定奥文斯 6月22日11:59 这就引出了一个问题,C++ 什么时候做c++;流对象使用互斥锁?,c++,locking,mutex,iostream,C++,Locking,Mutex,Iostream,在对此的答复中,ovanes指出: 请注意 boost::词法转换比 阿托伊。我也经常用它来做广告 性能非关键代码。这个 词法转换的问题在于 使用stringstream进行转换。如果 您正在多线程环境中工作 Environment从 标准库将在互斥锁上使用锁 对于插入的每个字符, 即使流对象是从 一条线。你的号码是多少 17个字符中的一个将涉及17个互斥 投入流时锁定奥文斯 6月22日11:59 这就引出了一个问题,对象何时锁定互斥锁?对于中的对象也是这样吗?如果这样可以防止这一点? < P>
对象何时锁定互斥锁?对于
中的对象也是这样吗?如果这样可以防止这一点? < P>当前的C++标准(C++ 03)不包含任何多线程的内容。
因此,库如何使用互斥体将取决于具体的实现。字符串流的问题在于它相当繁重。它与互斥量无关 我将解释原因:
- stringstream使用通用接口访问底层缓冲区,与文件或控制台访问相同:一组虚拟函数。它比在
char*
- 它使用区域设置信息,所以您可以实际解析字符串,该字符串取决于数千个分隔符的类型或为区域设置接口中的其他类获取的不同类型的数字
- 最后它调用atoi将字符串转换为数字
lexical_cast
功能非常强大,因为它允许对任何值进行强制转换,而不仅仅是像对atoi
所做的那样对整数进行强制转换,而且还可以对价格进行强制转换
第二件事,我不认为任何字符串缓冲区实现都使用互斥体。文件流有意义,但字符串流没有意义