Synchronization 共享资源(TWI/ADC)-消息队列';s或互斥';s

Synchronization 共享资源(TWI/ADC)-消息队列';s或互斥';s,synchronization,embedded,serial-port,Synchronization,Embedded,Serial Port,我为ADC编写了一个驱动程序,该驱动程序在read()函数中使用了一个互斥锁,如果ADC已经在使用,则会导致线程阻塞 目前,我在TWI接口上采用了相同的方法读回数据 我见过消息队列用于将要在TWI接口上发送的消息排队。但是,如果您正试图读回数据,那么您无论如何都要等待响应。那么,互斥方法不是更合适吗 人们能提供他们对我应该使用什么方法的想法吗?赞成/反对 谢谢 将请求/响应对象排队到一个运行接口的线程更复杂但更灵活-它允许使用相同机制进行同步和异步交换。需要协议交换的线程有一个选择——它们可以在

我为ADC编写了一个驱动程序,该驱动程序在read()函数中使用了一个互斥锁,如果ADC已经在使用,则会导致线程阻塞

目前,我在TWI接口上采用了相同的方法读回数据

我见过消息队列用于将要在TWI接口上发送的消息排队。但是,如果您正试图读回数据,那么您无论如何都要等待响应。那么,互斥方法不是更合适吗

人们能提供他们对我应该使用什么方法的想法吗?赞成/反对


谢谢

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

…或者你可以使用互斥锁。简单,但仅同步-如果上一次交换正在进行,则每个请求线程都必须等待。如果重新调校螺纹不想等待/堵塞,则为硬螺纹

马匹的路线