У меня есть одноплатный компьютер с устройством расширения I2C GPIO. Он указан как /dev/i2c-0. В моей многопоточной программе я открываю() это символьное устройство и читаю/пишу на него в отдельных потоках, используя функции i2c_smbus_write_byte_data и друзей из библиотеки libi2c, но я не уверен, что это потокобезопасно.
Я видел некоторые реализации драйвера gpio в пространстве ядра, которые привязываются к символьному устройству i2c и позволяют вам взаимодействовать с устройство, как если бы это было устройство gpio (а именно драйвер pca953x), и у них есть внутренние мьютексы внутри каждой функции gpio_set/get.
Я также видел другой поток stackoverflow, в котором люди говорят, что функции i2c_smbus_* имеют внутренние мьютексы, поэтому я действительно не могу быть уверен.
Связано: одновременный доступ I2C в Linux, мьютекс
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-on-linux