Wont в ScoreBoard
при обновлении переменной health
, нам нужно получить WriteLock
, так как мы обновляем общую переменную?
Вы правы, чтоМетод класса getMatchHealth()
выполняет модификацию общей переменной health
без удержания блокировки записи.Поскольку в классе нет другого механизма для синхронизации этих записей, это создает гонку данных, когда два потока вызывают getMatchHealth()
в одном и том же ScoreBoard
, не задействуя какую-либо форму внешней синхронизации.Это кажется недостатком метода, и у метода, похоже, есть и другие, более тонкие проблемы синхронизации.
Тем не менее, представленная программа, кажется, никогда не вызывает getMatchHealth()
вообще, идругие ScoreBoard
методы, по-видимому, свободны от недостатков синхронизации, поэтому недостатки представленной программы не затрагиваются.Тем не менее, если только эти недостатки не являются преднамеренными - например, для дидактических целей - я бы порекомендовал найти лучший учебный материал, чем тот, который предоставил пример программы.