Безопасно ли использовать process_post в функции обратного вызова Rime? - Контики

Я работаю с Rime, точнее, с примером рунической передачи. Как только сообщение получено, я сохраняю его в связанном списке, а затем отправляю событие в процесс, который отвечает за извлечение сообщений из связанного списка и их обработку. Мой код выглядит примерно так:

 static void recv_runicast(struct runicast_conn *c, 
                           const linkaddr_t *from, uint8_t seqno)
 {

     /*code to insert the message into the linked list*/
     ...

    /*Post an event to the process which extracts messages from the linked list */
    process_post(&extract_msg_from_linked_list, PROCESS_EVENT_CONTINUE, NULL);
 }

Мой вопрос: безопасно ли использовать process_post в функции обратного вызова recv_runicast? или я должен использовать process_poll?

заранее спасибо


person Sgio Dz    schedule 12.04.2017    source источник


Ответы (1)


Да, это безопасно. Операции сетевого стека выполняются в контексте процесса, и процессы Contiki не являются вытесняющими. Таким образом, практически любые операции, связанные с процессами, «безопасны».

Основное различие между process_post и process_poll заключается в том, что первый помещает новое событие в буфер событий процесса, а второй просто устанавливает флаг. Так что второй вариант чуть эффективнее. Кроме того, теоретически буфер событий может переполниться, и события начнут теряться, но это очень вряд ли будет проблемой.

Я бы вообще не использовал ни одну из этих функций, а выполнял бы обработку непосредственно в обратном вызове, чтобы упростить поток выполнения.

person kfx    schedule 13.04.2017