我有 2 个线程 Thread1 和 Thread2。我确实有一个外围设备读取或写入的功能。说一个 SPI 读或写函数。在某些情况下,这两个线程都使用 SPI 函数。由于线程本质上是并发的,因此两个线程是否有可能同时尝试访问该函数。那就是想要将 0x10 0x25 写入 SPI 的 Thread1。 Thread2 想要写入 0x20 0x56。如果不使用任何同步机制,是否有可能将错误的序列写入 SPI 缓冲区?
将您的 SPI 视为共享资源(关键部分),它必须是互斥的。
这是在 SPI 访问操作期间防止上下文切换的一般方案:
static pthread_mutex_t _mutex;
void SPI_init()
{
...
pthread_mutex_init(&_mutex);
...
}
void SPI_read(...)
{
pthread_mutex_lock(&_mutex);
...
pthread_mutex_unlock(&_mutex);
}
void SPI_write(...)
{
pthread_mutex_lock(&_mutex);
...
pthread_mutex_unlock(&_mutex);
}
我是一名优秀的程序员,十分优秀!