Существуют ли механизмы защиты для связи между потоками из разных процессов? - PullRequest
0 голосов
/ 30 мая 2020

Учитывая, что потоки (одного и того же процесса) выполняются в области общей памяти, и синхронизация доступа к общим данным внутри процесса приобретает беспрецедентное значение, как это применимо к потокам из разных процессов? Какие способы связи доступны для них?

1 Ответ

1 голос
/ 30 мая 2020

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

Как следствие, они используют стандартные механизмы межпроцессного взаимодействия, такие как как Unix сокеты, каналы и другие файловые дескрипторы; Механизмы SysV или POSIX IP C, такие как разделяемая память и семафоры; блокировка; и сигналы. Может быть удобно иметь поток в процессе, который предназначен для взаимодействия с другими процессами, но IP C может быть реализован и с однопоточными процессами, или в многопоточных процессах без выделенных потоков IP C.

Поскольку риск случайного изменения данных других потоков невозможен между процессами, иногда синхронизация выполняется ядром автоматически, например, с конвейерами, но может потребоваться координация между процессами. Блокировки файлов, такие как fcntl(2) и flock(2), могут предотвратить повреждение файлов взаимодействующими процессами; семафоры могут предотвратить конкуренцию или ограничить параллелизм для общих ресурсов; и даже можно использовать мьютекс для некоторых случаев с общей памятью. Инструменты, которые вы используете, зависят от ресурсов, которые вы используете в разных процессах.

...