ste*_*tef 7 linux concurrency mutex i2c embedded-linux
我正在嵌入式Linux中编写一个多线程C程序,从用户空间访问许多I2C设备(从设备).此外,我从多个线程访问相同的I2C设备.我正在使用SMBUS函数(i2c_smbus_write_byte_data,i2c_smbus_read_byte_data,i2c_smbus_read_i2c_block_data,...).
是否有内置并发访问的保护或我是否需要自己添加互斥?
例如:我有一个读取功能,通过I2C读取一个传感器的数据.但是也可以从另一个线程调用相同的函数,从而导致可能的并发访问.我是否必须在该函数中使用某些静态互斥锁,或者它是否已经在I2C访问函数中?
I 2 C是具有多个设备的共享总线,可以从多个进程和线程访问.因此,Linux I 2 C驱动程序代码使用互斥锁来管理对每个I 2 C总线的访问.
对于SMBus的功能,请参阅Linux内核函数i2c_smbus_xfer()在i2c-core-smbus.c.在开始传输之前,它会获得I 2 C适配器的锁定(查看源代码,然后查看调用i2c_lock_adapter()).所有SMBus事务都基于该功能.
对于我2 C函数,看到Linux内核的功能i2c_transfer()在i2c-core-base.c.在开始传输之前,它会锁定I 2 C适配器.所有I 2 C事务都基于该功能.
所以,是的,内置并发访问的保护.