juvf 17 18 июня, 2019 Опубликовано 18 июня, 2019 · Жалоба std::cout и/или printf() - потокозащищённые (в Linux)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 18 июня, 2019 Опубликовано 18 июня, 2019 · Жалоба Начиная с POSIX.1-2001 почти все стандартные функции (и cout/printf в том числе) должны быть thread-safe. Смотрите пункт 2.9.1 здесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 18 июня, 2019 Опубликовано 18 июня, 2019 · Жалоба 20 минут назад, arhiv6 сказал: Начиная с POSIX.1-2001 почти все стандартные функции (и cout/printf в том числе) должны быть thread-safe. Смотрите пункт 2.9.1 здесь. спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба 15 hours ago, juvf said: std::cout и/или printf() - потокозащищённые (в Linux)? Что вы хотите от "потокозащищённости"? Чтобы несколько элементов вывода, последовательно выводимые единым оператором std::cout и/или printf(), выглядели как единый фрагмент вывода (цельная строка и т.п.)? - Нет. Что можно их использовать в потоковых функциях? Да ... используйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба 8 минут назад, Olej сказал: Что вы хотите от "потокозащищённости"? я хочу из разных потоков выводить дебажную в терминал. в одном потоке printf("string 1\n"); printf("string 2\n"); printf("string 3\n"); в другом потоке printf("text 1\n"); printf("text 2\n"); printf("text 3\n"); 1) я хочу чтобы прога не легла при одновременном вызове std::cout или printf() с разных потоков. 2) я хочу видеть в терминале вывод с обоих потоков.... как минимум построчно разделённые, что-то типа string 1 string 2 text 1 text 2 text 3 string 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба 2 minutes ago, juvf said: 1) я хочу чтобы прога не легла при одновременном вызове std::cout или printf() с разных потоков. Не ляжет. 3 minutes ago, juvf said: 2) я хочу видеть в терминале вывод с обоих потоков.... как минимум построчно разделённые, что-то типа А этого вам никто не гарантирует ... по части "построчно разделённые". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба 23 минуты назад, juvf сказал: я хочу видеть в терминале вывод с обоих потоков.... как минимум построчно разделённые, что-то типа Вроде в пределах вызова одного printf, его текст выведется целиком. Если нужно объединить несколько printf, это можно сделать с помощью мьютексов или функций flockfile/funlockfile. Подробно этот момент расписан на stackoverflow в этой теме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба 13 минут назад, arhiv6 сказал: Это можно сделать с помощью мьютексов ну это понятно.... с помощью мьютексов можно сделать и 1) и 2). Просто не хотел заморачиваться. Думал может вызов printf() помещает в поток текст единым куском, и параллельный вызов printf() "не порвёт" строку из др потока. ps кстати..... printf() что делает.... открывает поток stdout , помещает текст, закрывает поток.... если в первом таске открыли stdout, то во втором таске printf() не заблокируется на открытии stdout? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба 15 минут назад, arhiv6 сказал: Вроде в пределах вызова одного printf, его текст выведется целиком. это и есть 2). спс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться