Эти потокобезопасные? - PullRequest
       6

Эти потокобезопасные?

6 голосов
/ 20 сентября 2010

Я посетил сегодня интервью, в котором интервьюер задал мне следующий вопрос:

Является ли повторный вход и взаимное исключение потокобезопасным? Вы можете объяснить, почему?

Я относительно новичок в параллельном программировании и не могу ответить на него .. Но я сказал ...

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

Интервьюер перешел к следующему вопросу, хотя и в другую область ... Я думаю, что испортил этот вопрос ...

Что он ожидает от меня, когда он спросит меня об этом?

Ответы [ 3 ]

5 голосов
/ 20 сентября 2010

Правильный ответ должен быть:

Да, это реализация безопасности потока.

повторный вход

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

один пример

Взаимное исключение

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

0 голосов
/ 20 сентября 2010

Я цитирую http://en.wikipedia.org/wiki/Reentrant_(subroutine)

Обе концепции повторного входа и безопасности потоков связаны с тем, как функции обрабатывают ресурсы.Однако они не одинаковы.

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

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

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

Следовательно, повторное включение является более фундаментальным свойством, чем безопасность потока, и по определению приводит к безопасности потока: каждая функция повторного входа являетсяпотокобезопасный;однако не каждая поточно-ориентированная функция является реентерабельной.

0 голосов
/ 20 сентября 2010

Оба потока безопасны - вы можете прочитать их также в Википедии:http://en.wikipedia.org/wiki/Reentrant_(subroutine)
http://en.wikipedia.org/wiki/Mutual_exclusion
Повторно входящие мьютексы - это мьютексы, которые могут блокироваться несколько раз из одного и того же потока, если гарантируется, что для каждой блокировки существует соответствующая разблокировка.

...