2016-02-08 15 views
0

Я смущен. Как я понимаю, фрагмент кода thread-safe, если он работает правильно во время одновременного выполнения несколькими потоками. И data race возникает, когда две инструкции из разных потоков обращаются к одному и тому же месту памяти, по крайней мере один из этих обращений является записью, и нет никакой синхронизации, которая предусматривает какой-либо конкретный порядок среди этих обращений.Являются ли условия безопасности потоков и данных для решения одной и той же проблемы?

Его ясно, что оба относятся к параллелизму. Но решают ли они одно и то же?

ответ

1

Если программа (или ее часть) имеет род в данных, то есть очень высокая вероятность того, что программа НЕ Потокобезопасная.

Потокобезопасности объявляет окончательное свойства для программы, которая использует многопоточность. Но проверка это свойство очень трудно задача и не может быть полностью выполняются автоматически (поскольку термин корректности в многопоточном случае плохо формализованные).

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

не Обобщенная:

  1. Нетгонки данных - программа может бытьпоточно.
  2. гонки данных - программа врядпоточно.

Некоторые языки запрещают писать программы с расами данных. Не для таких языков:

  1. Нетгонки данных - программа может бытьпоточно.
  2. гонки данных - программа никогдапоточно.