共享资源(TWI / ADC) - Message Queue或Mutex

时间:2012-12-27 10:32:24

标签: synchronization embedded serial-port

我为ADC写了一个驱动程序,它在read()函数中使用了一个Mutex,如果ADC已经被使用,会导致线程被阻塞。

我目前使用相同的方法在TWI接口上读回数据。

我见过Message Queue用于排队要在TWI接口上发送的消息。但是,如果您正在尝试读取数据 - 您仍然希望等待响应。那么,Mutex方法不是更合适吗?

人们可以提出我应该使用什么方法的想法吗?优点/缺点?

感谢。

1 个答案:

答案 0 :(得分:2)

将请求/响应对象排队到运行接口的一个线程更复杂但更灵活 - 它可以允许使用相同的机制进行同步和异步交换。需要协议交换的线程有一个选择 - 它们可以在某个同步对象上等待接口线程发出已收到响应的信号,或者提供自己的应答队列机制,以便多个请求可以排队到接口线程和回复在每个完成后排队等候。我通常在RR类中提供一个'OnCompletion(thisRRobject)'函数/方法,接口线程在完成时调用该函数/方法,因此将实际的回复操作委托给请求线程中的代码。 RR对象还可以包含异常/错误消息,超时间隔等成员。这样的复杂性在库中很好,为用户提供了最广泛的通信选择。

..或者您可以使用互斥锁。简单但仅同步 - 如果先前的交换正在进行,则每个请求线程都必须等待。如果一个请求线程不想等待/阻塞,那就很难。

课程的马匹......