【问题标题】:Is it safe to use process_post within a callback function of Rime? - Contiki在 Rime 的回调函数中使用 process_post 是否安全? - 康蒂基
【发布时间】:2017-04-13 17:50:16
【问题描述】:

我正在使用 Rime,更具体地说是使用 runicast 示例。收到消息后,我将其存储在链表中,然后我将事件发布到负责从链表中提取消息并处理它们的进程。我的代码是这样的:

 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);
 }

我的问题是:在回调函数 recv_runicast 中使用 process_post 是否安全?还是我应该使用 process_poll?

提前致谢

【问题讨论】:

    标签: contiki


    【解决方案1】:

    是的,它是安全的。网络堆栈操作是在进程上下文中完成的,Contiki 进程不是抢占式的。所以几乎所有与流程相关的操作都是“安全的”。

    process_postprocess_poll 的主要区别在于前者会将新事件放入进程事件缓冲区中,而后者只会设置一个标志。所以第二种选择效率更高一些。此外,从理论上讲,事件缓冲区可能已满并且事件开始丢失,但这非常不太可能成为问题。

    我根本不会使用这些函数,而是直接在回调中进行处理以简化执行流程。

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 2021-05-07
      • 2020-12-17
      • 1970-01-01
      • 2011-10-31
      • 2011-07-14
      • 2013-05-15
      • 1970-01-01
      • 2017-07-27
      相关资源
      最近更新 更多