Я пытаюсь написать программу на C, основанную на концепции общего доступа.
объем памяти. Я создаю две общие памяти и создаю два процесса
используя функцию fork (). Я хочу, чтобы один из процессов записал в один
общей памяти и другой, чтобы читать из нее и наоборот с
другая общая память. Я не хочу использовать трубы. Как я могу контекст
переключаться между двумя процессами непрерывно, так что я могу читать из
одно и пишешь с другого?
Переключение контекста не является концепцией C. ОС управляет им, вне контроля пользовательских программ. Но это может даже не относиться к вашей проблеме, потому что многоядерные и многопроцессорные компьютеры сегодня являются нормой, и они могут обеспечить истинный параллелизм без переключения контекста.
Два процесса могут полностью обмениваться данными через общую память. В конце концов, это то, что для . Но они не могут сделать это без механизма синхронизации своих действий. Например, как процесс B должен знать, когда процесс A завершил обновление совместно используемой памяти, чтобы B мог прочитать то, что написал A? И как A может узнать, что B завершил чтение, чтобы не было потеряно никаких данных, если он снова обновляет общую память?
Эти виды проблем синхронизации решаются с помощью специальных объектов синхронизации, таких как семафоры, мьютексы и условные переменные, и функций, которые над ними работают. Как правильно их использовать - слишком обширная тема, чтобы охватить ее одним SO-ответом, но вы найдете много примеров в различных SO-вопросах о деталях.
Или вы можете просто использовать каналы, которые намного проще для коммуникаций, которые по своей сути являются последовательными.