Получить доступ к очереди threadx одновременно
ThreadX содержит содержит очереди сообщений, которые позволяют взаимодействие между потоками. Предположим, у меня есть несколько потоков, которые читают и пишут в очередь. Нужно ли синхронизировать доступ к этой очереди (например, с помощью мьютекса)?
1 ответ
Любой поток ThreadX может отправить сообщение в очередь, а любой поток может получить сообщение из очереди. Нет ограничений на количество потоков, которые могут получить доступ к очереди. Доступ из нескольких потоков уже синхронизирован ThreadX с дисциплиной FIFO - потоки возобновляются в порядке их приостановки. Тем не менее, порядок может быть изменен с помощью вызова функции tx_queue_prioritize
,
Нет необходимости синхронизировать, сообщения заполняются в буфере по принципу FIFO. Они продолжают накапливаться в очереди, пока она полностью не заполнится. Вы можете выбрать отправку сообщения в начале очереди, используяtx_queue_front_send
api.
Когда вы используете tx_queue_receive
вы указываете тики или время ожидания сообщения, до тех пор, пока планировщик Threadx автоматически приостанавливает поток и возобновляет его, как только приходит сообщение.
А поскольку очереди являются общедоступным ресурсом, к нему может получить доступ любой поток.