Проблема с string_stream заключается в том, что он довольно тяжелый. И это не имеет отношения к мьютексам.
И я объясню почему:
- stringstream использует универсальный интерфейс для доступа к базовому буферу, так же как и для файлов или для доступа к консоли: набор виртуальных функций. Это медленнее, чем итерация по
char *
- он использует информацию о локали, поэтому вы можете фактически проанализировать строку, которая зависит от типа разделителей тысяч или разных типов цифр, которые выбираются для другого класса в интерфейсе локали.
- И, наконец, он вызывает atoi для преобразования строки в число.
lexical_cast
является очень мощным, потому что он позволяет разыгрывать любое значение, а не целое число, как в случае с atoi
, но с силой приходит цена.
Во-вторых, я не думаю, что любая реализация string_buffer использует мьютексы. Файловый поток имеет смысл, но не строковый поток.