在这个question ovanes状态的答案中:
请注意 boost :: lexical_cast的速度要慢得多 的atoi。我也经常使用它 性能非关键代码。该 lexical_cast的问题在于它 使用stringstream进行转换。如果 你正在使用多线程 environement来自的任何流类 标准库将使用互斥锁上的锁 对于插入的每个字符, 即使使用了流对象 单个线程。包含您的数字 17个字符将涉及17个互斥 锁定时放入流中。 - ovanes 6月22日11:59
问题是,<iostream>
对象何时锁定互斥锁?这对<sstream>
的对象也是如此吗?如果是这样可以预防?
答案 0 :(得分:4)
当前的C ++标准(C ++ 03)不包含任何有关多线程的内容。
因此,库如何使用互斥锁将取决于具体的实现。
答案 1 :(得分:0)
string_stream的问题在于它很重。它与互斥锁无关。
我会解释原因:
char *
lexical_cast
非常强大,因为它允许转换任何值,而不是仅使用atoi
转换为整数,但是功率会降价。
第二件事,我认为任何string_buffer实现都不使用互斥锁。文件流有意义,但不是字符串流。