У меня есть приложение, разработанное на C ++, в Visual Studio, на Windows, с процессором Intel.
Это приложение используется на нескольких машинах, в разных местах, все с процессорами Intel.
В последнее время его устанавливали на ПК с процессором AMD.
На машине AMD на определенной функции приложение зависает и вылетает.
Функция, которая дает сбой, использует блокировку ускоренного потока, а затем стандартные функции opencv (в частности, модуль реперных маркеров aruco), поэтому я предполагаю, что проблема заключается в блокировках потоков.
соответствующий код:
// заголовок
typedef boost::shared_mutex Lock;
typedef boost::unique_lock< Lock > WriteLock;
typedef boost::shared_lock< Lock > ReadLock;
Lock floorLock;
// поток первый (Производитель)
WriteLock f_lock2(floorLock);
frameFloor = image_ocv.clone(); //an opencv::Mat
f_lock2.unlock();
// поток два (потребитель)
cv::Mat image_ocv;
ReadLock f_lock2(floorLock);
image_ocv = frameFloor;
f_lock2.unlock();
Я попытался заменить их на очереди, защищенные от рекламы, и сбой не исчез.
Другая третья сторона проверила это на разных машинах и подтвердила поведение. Единственная разница между машинами, на которых это работает нормально, и машинами, на которых происходит сбой, - это процессор Intel против AMD.
К сожалению, у меня нет машин AMD, поэтому у меня проблемы с отладкой.
Есть ли причина, по которой код, скомпилированный на процессоре Intel, вылетает из строя на AMD? Что я могу исправить, чтобы это исправить?