Как я могу непрерывно переключаться между дочерним и родительским процессами? - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь написать программу на C, основанную на концепции разделяемой памяти. Я создаю две разделяемые памяти и создаю два процесса, используя функцию fork (). Я хочу, чтобы один из процессов записывал в одну из совместно используемой памяти, а другой - из нее, и наоборот, с другой совместно используемой памятью. Я не хочу использовать трубы. Как я могу переключаться между двумя процессами непрерывно, чтобы я мог читать с одного и писать с другого?

1 Ответ

0 голосов
/ 06 сентября 2018

Я пытаюсь написать программу на C, основанную на концепции общего доступа. объем памяти. Я создаю две общие памяти и создаю два процесса используя функцию fork (). Я хочу, чтобы один из процессов записал в один общей памяти и другой, чтобы читать из нее и наоборот с другая общая память. Я не хочу использовать трубы. Как я могу контекст переключаться между двумя процессами непрерывно, так что я могу читать из одно и пишешь с другого?

Переключение контекста не является концепцией C. ОС управляет им, вне контроля пользовательских программ. Но это может даже не относиться к вашей проблеме, потому что многоядерные и многопроцессорные компьютеры сегодня являются нормой, и они могут обеспечить истинный параллелизм без переключения контекста.

Два процесса могут полностью обмениваться данными через общую память. В конце концов, это то, что для . Но они не могут сделать это без механизма синхронизации своих действий. Например, как процесс B должен знать, когда процесс A завершил обновление совместно используемой памяти, чтобы B мог прочитать то, что написал A? И как A может узнать, что B завершил чтение, чтобы не было потеряно никаких данных, если он снова обновляет общую память?

Эти виды проблем синхронизации решаются с помощью специальных объектов синхронизации, таких как семафоры, мьютексы и условные переменные, и функций, которые над ними работают. Как правильно их использовать - слишком обширная тема, чтобы охватить ее одним SO-ответом, но вы найдете много примеров в различных SO-вопросах о деталях.

Или вы можете просто использовать каналы, которые намного проще для коммуникаций, которые по своей сути являются последовательными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...