2016-10-14 3 views
-1

В настоящее время я изучаю многопоточность и использование структур взаимного исключения, таких как блокировки, семафоры и условные переменные.Как понять примитивы многопоточности и взаимного исключения

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

Любой подсказку было бы полезно. Спасибо заранее.

+1

Ваш вопрос слишком широк для SO. Вам лучше читать учебник или читать википедию для каждого из этих примитивов, чтобы понять, когда они понадобятся/уместны. –

+0

мой любимый учебник 'pthreads'. Даже если вы не используете 'pthreads', понятия одинаковы: https://computing.llnl.gov/tutorials/pthreads/ – yano

+0

Благодарим за информацию! – susanc

ответ

0

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

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

  2. Семафоры также имеют ряд вариантов. Они могут быть настроены для обработки одиночных доступов, множественного доступа, одного/множественного доступа (например, 1 запись или несколько считывателей). Уровень накладных расходов намного меньше, чем у менеджера блокировки. Тем не менее, приложения должны обрабатывать блокировки самостоятельно.

  3. Переменные условий, как правило, являются самым простым методом блокировки. Неизменно они полагаются на аппаратные инструкции, предназначенные для блокировки, такие как команда Test и Set Interlocked. Это часто используется для блокировок спинов, используемых для ресурсов ядра.

Смежные вопросы