Перейти к содержанию
    

cout/printf из разных потоков

Начиная с POSIX.1-2001 почти все стандартные функции (и cout/printf  в том числе) должны быть thread-safe. Смотрите пункт 2.9.1 здесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, arhiv6 сказал:

Начиная с POSIX.1-2001 почти все стандартные функции (и cout/printf  в том числе) должны быть thread-safe. Смотрите пункт 2.9.1 здесь.

спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 hours ago, juvf said:

std::cout и/или printf() - потокозащищённые (в Linux)?

Что вы хотите от "потокозащищённости"?

Чтобы несколько элементов вывода, последовательно выводимые единым оператором std::cout и/или printf(), выглядели как единый фрагмент вывода (цельная строка и т.п.)? - Нет.

Что можно их использовать в потоковых функциях? Да ... используйте. :acute:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, juvf said:

1) я хочу чтобы прога не легла при одновременном вызове std::cout или printf()  с разных потоков.

Не ляжет.

3 minutes ago, juvf said:

2) я хочу видеть в терминале вывод с обоих потоков.... как минимум построчно разделённые, что-то типа

А этого вам никто не гарантирует ... по части "построчно разделённые".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 минуты назад, juvf сказал:

я хочу видеть в терминале вывод с обоих потоков.... как минимум построчно разделённые, что-то типа 

Вроде в пределах вызова одного printf, его текст выведется целиком. Если нужно объединить несколько printf, это можно сделать с помощью мьютексов или функций flockfile/funlockfile. Подробно этот момент расписан на stackoverflow в этой теме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, arhiv6 сказал:

Это можно сделать с помощью мьютексов

ну это понятно.... с помощью мьютексов можно сделать и 1) и 2). Просто не хотел заморачиваться. Думал может вызов printf() помещает в поток текст единым куском, и параллельный вызов printf() "не порвёт" строку из др потока.

 

ps кстати.....  printf() что делает.... открывает поток stdout , помещает текст, закрывает поток.... если в первом таске открыли stdout, то во втором таске printf() не заблокируется на  открытии stdout?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, arhiv6 сказал:

Вроде в пределах вызова одного printf, его текст выведется целиком.

это и есть 2). спс

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...