Несинхронизированный доступ к памяти и многопоточная гонка?
Касательно представленного куска:
Вопервых — надо понять, являются ли в вашем случае операции манипулирования double — атомарными с заблокированной шиной, для этого нужно знать архитектуру процессора, на котором все это пускается и видеть дизассембл представленного кода.
Во вторых надо убедиться в том, что сама функция вычислить(...) — является реентерабельной.
В третих — с чего вы вообще взяли что это гонка?

Исходя из представленного кода — можно только предложить обернуть его в double checked locking, но вообще то, что оно до сих пор не обернуто говорит или о том, что первые два пункта уже проделаны (что сомнительно, ибо в таком случае понятно, что в представленном коде нет гонки), или о том, что нифига этот код ни «хорошо отлаженный».
Если данные невыровненны, то могут быть любые фокусы, атомарность не гарантируется.