Некоторое время коллега сказал мне, что он потратил много времени на отладку состояния гонки.Виновник оказался примерно таким:
void foo()
{
ScopedLock(this->mutex); // Oops, should have been a named object.
// Edit: added the "this->" to fix compilation issue.
// ....
}
Чтобы предотвратить повторение ситуации, он создал следующий макрос после определения класса ScopedLock:
#define ScopedLock(...) Error_You_should_create_a_named_object;
Thisпатч работает отлично.
Кто-нибудь знает какие-нибудь другие интересные методы, чтобы предотвратить эту проблему?