多个线程使用外围例程调用相同的函数

时间:2014-03-07 11:19:54

标签: c multithreading synchronization embedded-linux spi

我有2个线程Thread1和Thread2。我确实有一个外围读或写功能。说SPI读或写功能。在某些情况下,两个线程都使用SPI函数。由于线程本质上是并发的,因此两个线程都有可能尝试同时访问该函数。那就是Thread1想要写入0x10 0x25到SPI。而Thread2想要写0x20 0x56。如果没有使用任何同步机制,是否有可能将错误的序列写入SPI缓冲区?

2 个答案:

答案 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/