To 27.3 Standard iostream objects [iostream.objects], add a new paragraph at the end of the section:
Concurrent access to a synchronized [ios.members.static] standard iostream object's formatted and unformatted input [istream] and output [ostream] functions or a standard C stream by multiple threads shall not result in a data race [intro.multithread]. [Note: Users must still synchronize concurrent use of these objects and streams by multiple threads if they wish to avoid interleaved characters
получается что можно и UB нет? Интересно, как реализована синхронизация чтения.
M>Concurrent access to a synchronized [ios.members.static] standard iostream object's formatted and unformatted input [istream] and output [ostream] functions or a standard C stream ...
M>
M>получается что можно и UB нет? Интересно, как реализована синхронизация чтения.
В этой цитате, вроде, говорят про standard iostreams (e.g. cin, cout)?
Note: Users must still synchronize concurrent use of these objects and streams by multiple threads if they wish to avoid interleaved characters
M>>получается что можно и UB нет? Интересно, как реализована синхронизация чтения. LVV>Ничего не получается.синхронизировать доступ требуется.
т.е. data race нет, но она есть, как же так О чем тогда там говорится, не подскажите?
кстати, к msvc++ сказано тоже, thread safe:
http://msdn.microsoft.com/en-us/library/c9ceah3b.aspx:
A single object is thread safe for reading from multiple threads. For example, given an object A, it is safe to read A from thread 1 and from thread 2 simultaneously.
Здравствуйте, c-smile, Вы писали:
CS>Смысл-то в чем?
да я так просто, интереса ради спросил.
а то некоторые говорят, что можно. Хотя:
while (std::getline(...)); // тут проверка на eof не корректна если из разных потоков это происходит.
// т.к. чтение и проверка на ошибки это две разные операции которое надо синхронизировать.