В написанной программе использую свою функцию читающую GPIO в двух разных потоках. И получаю странную ситацию иногда фукция возвращает мусор. Текст функции привожу ниже, в нее передается указатель на файл который определен глобально. Я его получаю только в одном месте при открытии файла. Более того файл открыт как readonly.
и переменную buffer определить в вызывающем потоке то все работает корректно.
Мне не понятно почему вроде б локальная переменная buffer[2] портится.
И это касается только массива? Наприре если определить ее как short то все будет хрошо? Или никто ничего не гарантирует?
Скорее всего, вызов функции ReadGPIO во втором потоке происходит между вызовом lseek и read в первом. В таком случае, когда произойдет вызов read в первом потоке, текущая позиция у файла уже не будет равна 0.
У Вас есть два варианта:
1. Использовать mutex для захвата блокировки доступа к файлу: