Что означает безопасность потоков? - PullRequest
7 голосов
/ 11 марта 2011

Я читал некоторые блоги по многопоточному программированию в ruby.То, что я заметил, - то, что автор имеет тенденцию использовать слово безопасность потока.Что это значит?Почему важно писать код безопасности потока?

1 Ответ

7 голосов
/ 11 марта 2011

Если у вас есть ресурс (например, глобальный список книг), и у вас запущены два потока, которые могут изменить этот список. Есть много ситуаций, когда данные списка могут стать противоречивыми.

  • (Тема A читает книгу и отображает ее данные)
  • (Поток B удаляет ту же Книгу, в то время как Данные используются Потоком A)
  • (Тема А теперь хочет добавить некоторую информацию в Книгу)

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

Взаимная блокировка , упомянутая SpyrosP, происходит, когда Поток A блокирует Список для записи и ожидает, пока Поток B добавит данные в список. Потому что оба потока будут ждать друг друга, чтобы сделать то, что они не могут сделать. Это происходит только в том случае, если механизм обеспечения безопасности потоков реализован неправильно.

...