2016-03-25 2 views
-1

В частности, мьютексы pthread, переменная условия, семафор и т. Д. Могут ли они использоваться совместно с сегментом разделяемой памяти и гарантированно будут функционировать должным образом? Моя мысль да, так как нет никакой реальной разницы между процессами и потоками в Linux, но я хочу быть уверен.Безопасно ли распространять примитивы синхронизации между процессами через общую память?

+0

как я знаю «нет никакой разницы между процессами и потоками в Linux», это неправильно, потому что каждый процесс имеет собственное адресное пространство, но потоки работают в одном и том же адресном пространстве в своем собственном процессе. Таким образом, общая память не достижима через процессы, существует концепция https://en.wikipedia.org/wiki/Inter-process_communication, но я не уверен, что мьютексы или другие могут работать или нет. – FZE

+1

Процессы и потоки в Linux - это как просто задачи в ядре. Единственное различие заключается в том, что по умолчанию используется общая память (процессы обычно не имеют ничего общего), потоки разделяют все (за некоторыми исключениями). Вы можете абсолютно сопоставить сегмент разделяемой памяти между процессами. –

+0

Конечно, вы можете сопоставить общую память между процессами; вот и вся причина существования! –

ответ

1

Ответ оказывается да. POSIX не требует, чтобы он был безопасным для использования мьютексов через общую память, но он работает в Linux. Чтобы быть в безопасности, нужно установить атрибут PTHREAD_PROCESS_SHARED через функцию pthread_mutexattr_setpshared при создании переменной блокировки или условия. Это явно указывает на то, что любой поток может работать с блокировкой даже через общую память.

+0

Такие функции, как 'sem_init()' принимают параметр 'pshared', чтобы указать, будет ли доступ к объекту потоками одного процесса или несколькими процессами. –