Jump to content

    
Sign in to follow this  
juvf

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

Recommended Posts

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

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

спасибо

Share this post


Link to post
Share on other sites
15 hours ago, juvf said:

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

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

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

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

Share this post


Link to post
Share on other sites
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

 

 

Share this post


Link to post
Share on other sites
2 minutes ago, juvf said:

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

Не ляжет.

3 minutes ago, juvf said:

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

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

Share this post


Link to post
Share on other sites
23 минуты назад, juvf сказал:

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

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

Share this post


Link to post
Share on other sites
13 минут назад, arhiv6 сказал:

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

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this