LINUX.ORG.RU

fork() и shared global variable


0

0

Нужно для форкнутных child'ов иметь одну общую глобальньную переменную, доступ к которой будет осуществляться с помощью семафоров. При fork() для каждого процесса будет свой экземпляр переменной (copy-on-write в той же степи). vfork() де факто не используется практически ни где (deprecated?).

Как можно для child'ов иметь общую глобальную переменную? Спасибо.

P.S. pthreads -- инструмент, который предоставит решение для данной задачи использовать не хочется.

anonymous

> vfork() де факто не используется практически ни где (deprecated?).

считай что это не форк :). Оно нужно чтобы быстро запускать функции типа execve, больше vfork ни на что не годится. Подробности в man и гугл.

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

> считай что это не форк :). Оно нужно чтобы быстро запускать функции типа execve, больше vfork ни на что не годится. Подробности в man и гугл.

Да и к тому же сегодня это уже не так. Ибо теперь память от родителя к ребёнку копируется только при изменении. Так что vfork не нужен.

lv ★★
()

>vfork() де факто не используется практически ни где (deprecated?).

лолшто? fork активно оптимизируется в vfork если далее по тексту идет вызов execve. однако при этом блокируется родитель, нельзя возвращаться из функции вызвавшей vfork и т.д.

man vfork

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

> man shmget, man shmat и иже с ними.

Это немного про другое, если надо НЕродственные процессы соединить. Не кошерно: после внезапной смерти процесса (хотя бы посредством kill -9) оно останется мусором.

Если форк, то только так: в папе

volatile typeOfVar *var = mmap(0,sizeof(typeOfVar),PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,0, 0);

и var доступна в детях.

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

> Вдогонку (на вс. сл.): надеюсь, понятно, что mmap нужно ДО форка делать?

Да, конечно, понятно. Всем спасибо за помощь!

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

> man shmget, man shmat и иже с ними. Фу унылость какая, толи дело в виндах - сделал shared секцию и пиши переменные как обычно.

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