LINUX.ORG.RU

да работать будет. Для нормальной работы требуется добавить межпроцессную синхронизацию

cvv ★★★★★
()
Ответ на: комментарий от cvv

Есть многопоточная прога, и каждый из порожденных ею потоков должен сливать инфу по каналу либо родителю, либо проге-монитору (которая тоже может быть порожденным процессом, я еще не решила...). Читающий конец пайпа у родителя, пишущий - как один дескриптор у всех потомков, верно? Вот...

anonymous
()
Ответ на: комментарий от Lumi

:)))) Да, девушки здесь звери экзотические, вижу... :( лучше по-джентльменски дайте советик :))

anonymous
()
Ответ на: комментарий от anonymous

>Будет ли работать открытый пайп для порожденных процессов?

кстати ето единственно-возможное применение пайпов: связь родителя и ребёнка или связь двух ребёнков одного родителя.

>Читающий конец пайпа у родителя, пишущий - как один дескриптор у всех потомков, верно?

да после fork ты закрываеш пишущий конец пайпа у родителя и читающий у потомка.

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

далее потомок запускает потоки которые пишут в пайп после чего освобождает мьютекс дабы другие потоки тоже погли получить доступ к пайпу.

>либо проге-монитору (которая тоже может быть порожденным процессом, я еще не решила...).

если зделаеш монитор то после форка закроеш у родителя читающий конец пайпа ибо он ему будет совсем ненужен.

>пишущий - как один дескриптор у всех потомков,

пишущий - как один дескриптор у всех ПОТОКОВ твоего потомка

в твоём случае использовать для синхронизации flock, lockf, fcntl ты не можеш ибо есть вероятность что они остановят ВСЕ потоки твоего потомка.

PS:потомки всегда ПРОЦЕССЫ. потоки потомками НЕ БЫВАЮТ.

cvv ★★★★★
()
Ответ на: комментарий от cvv

>>Будет ли работать открытый пайп для порожденных процессов?

>кстати ето единственно-возможное применение пайпов: связь родителя и ребёнка или связь двух ребёнков одного родителя.

не совсем точно но исключения ето весьма тяжёлый случай, который используется крайне редко

cvv ★★★★★
()
Ответ на: комментарий от cvv

Ясно. У меня проблема действительно в синхронизации. Всем спасибо.

:))) Для фоток мыло оставлять :)))

anonymous
()
Ответ на: комментарий от cvv

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

мутекс один на всех или как? а то позахватывают каждый свой...

anonymous
()
Ответ на: комментарий от anonymous

>>потом потомок создаёт мьютекс или чёто подобное для синхронизации

>>доступа потоков к пайпу и захватывает мьютекс.

>мутекс один на всех или как? а то позахватывают каждый свой...

естественно. ты создаёш мьютекс до создания потоков которые его потом унаследуют

PS: у меня есть подозрение что вы немного плаваете в вопросах различия между потоками и процессами. отсюдова тоже могут рости ноги у багов

cvv ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо за помощь. Фотку заслужил :)

anonymous
()
Ответ на: комментарий от anonymous

>Поток - это в моем случае название процесса, а не pthread.

ето очень плохо. юникс ето не виндуза где ети два термина можно смешивать. я бы до етого никогда не догадался. также вы меня немного запутали.

в таком случае вам надо действовать по следующему приципу:

для синхронизации потоков/тредов pthread используем мьютексы

для синхронизации процессов используем файловые блокировки flock, lockf, fcntl. Я предпочитаю последнюю

cvv ★★★★★
()
Ответ на: комментарий от anonymous

я надеюсь ты перед использованием канала закрывешь все ненужные дескрипторы.. и ислользуешь канал для передачи сообщений лишь в одну сторону

Nesk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.