Межпроцессное взаимодействие Unix C - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть два процесса, A и B. B - это процесс, который выполняет некоторые функции.Процесс A - это тот, который контролирует B. То есть процесс A инструктирует процесс B, предоставляя ему данные (управляющие и функциональные).

У меня есть поток в B, выделенный для IPC. Все, что этот поток делает, это получает инструкции от процесса A, в то время как другие работающие потоки делают все, что им нужно, с уже существующими данными.

Я думал о каналах и разделяемой памяти, используя shmat.Но я не удовлетворен, я хочу что-то вроде, когда процесс A записывает сообщение в B, только тогда должен проснуться поток ipc в B .. Любая идея о том, как добиться этого?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Специфика зависит от того, какая гибкость вам нужна и кто использует какие каналы, но это должно сработать: выберите поток IPC процесса B для удобства чтения канала. Когда процесс A записывает данные в канал, запускается поток IPC процесса B.

0 голосов
/ 01 мая 2011

Я нашел решение. Я заставил один из потоков открыть один конец канала для чтения, выполнить фактическое чтение и закрыть его. Это продолжается в цикле while, который бесконечен!

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

Infact эта настройка также позволяет избежать проблем с синхронизацией. Но я не знаю, каковы последствия этого, хотя перерывы выступлений!

...