скорей всего первое.
но с глобальными переменными вопрос сложный.
с нереализованой переменной дела плохи и стабильно в начале запуска все потоки пыютаются ее реализовать и это очень плохо.
с реализованой тоже непорядок. проверка по начальному значению также работает как с реализацией. допустим, запустил 5 потоков и все они определяют переменную с начальным значением. Правильная логика с потоками должна быть такой что после разлочки обьекта все переменные должны быть иницализированы или поменять значение, но этого не произходит.
лучшим вариантом для себя я считаю завести залинкованый список или таблицу и хранить данные там как будто это глобальные переменные. Блок лочить нужно полюбому.