LINUX.ORG.RU

fork() и shared global variable


0

0

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

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

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

anonymous

Re: fork() и shared global variable

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

Shared memory.

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

Uncle_Theodore ★★ ()

Re: fork() и shared global variable

mmap с MAP_SHARED

Chumka ★★★ ()

Re: fork() и shared global variable

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

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

true_admin ★★★★★ ()
Ответ на: Re: fork() и shared global variable от true_admin

Re: fork() и shared global variable

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

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

lv ★★ ()

Re: fork() и shared global variable

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

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

man vfork

generatorglukoff ★★ ()
Ответ на: Re: fork() и shared global variable от Uncle_Theodore

Re: fork() и shared global variable

> 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 ★★★★★ ()
Ответ на: Re: fork() и shared global variable от Die-Hard

Re: fork() и shared global variable

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

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

anonymous ()
Ответ на: Re: fork() и shared global variable от Uncle_Theodore

Re: fork() и shared global variable

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

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