В частности, мьютексы pthread, переменная условия, семафор и т. Д. Могут ли они использоваться совместно с сегментом разделяемой памяти и гарантированно будут функционировать должным образом? Моя мысль да, так как нет никакой реальной разницы между процессами и потоками в Linux, но я хочу быть уверен.Безопасно ли распространять примитивы синхронизации между процессами через общую память?
-1
A
ответ
1
Ответ оказывается да. POSIX не требует, чтобы он был безопасным для использования мьютексов через общую память, но он работает в Linux. Чтобы быть в безопасности, нужно установить атрибут PTHREAD_PROCESS_SHARED
через функцию pthread_mutexattr_setpshared при создании переменной блокировки или условия. Это явно указывает на то, что любой поток может работать с блокировкой даже через общую память.
+0
Такие функции, как 'sem_init()' принимают параметр 'pshared', чтобы указать, будет ли доступ к объекту потоками одного процесса или несколькими процессами. –
как я знаю «нет никакой разницы между процессами и потоками в Linux», это неправильно, потому что каждый процесс имеет собственное адресное пространство, но потоки работают в одном и том же адресном пространстве в своем собственном процессе. Таким образом, общая память не достижима через процессы, существует концепция https://en.wikipedia.org/wiki/Inter-process_communication, но я не уверен, что мьютексы или другие могут работать или нет. – FZE
Процессы и потоки в Linux - это как просто задачи в ядре. Единственное различие заключается в том, что по умолчанию используется общая память (процессы обычно не имеют ничего общего), потоки разделяют все (за некоторыми исключениями). Вы можете абсолютно сопоставить сегмент разделяемой памяти между процессами. –
Конечно, вы можете сопоставить общую память между процессами; вот и вся причина существования! –