我有2个线程Thread1和Thread2。我确实有一个外围读或写功能。说SPI读或写功能。在某些情况下,两个线程都使用SPI函数。由于线程本质上是并发的,因此两个线程都有可能尝试同时访问该函数。那就是Thread1想要写入0x10 0x25到SPI。而Thread2想要写0x20 0x56。如果没有使用任何同步机制,是否有可能将错误的序列写入SPI缓冲区?
答案 0 :(得分:2)
将您的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);
}
答案 1 :(得分:1)
可以按任何顺序安排线程。所以,是的,您可以将错误的序列写入外设寄存器。
所以,为了避免使用同步原语!
请参阅此基本教程,了解如何使用互斥锁:http://www.thegeekstuff.com/2012/05/c-mutex-examples/