Кажется очень, очень маловероятным, что такая вещь существует как единое правило .Представьте себе следующее:
public void maybeAccessConcurrently(Program x) {
if(halts(x)) {
accessConcurrentObject();
} else {
// don't.
}
}
Я не знаю о вас, но я не могу придумать правило, которое не эквивалентно решению здесь проблемы остановки, особенно нетпростым осмотром типов или деклараций.Я думаю, вы можете обнаружить, что, как и другие методы статического анализа, есть набор свойств, которые вы можете проверить в пределах разумного.Проект Bandera представляет собой попытку использовать различные методы проверки моделей для проверки свойств параллельного кода Java.Могут быть и другие подобные усилия (все из которых, скорее всего, связаны с проверкой модели, учитывая наличие параллелизма).