FOS的消息隊列管理

  • 什麼是消息隊列
  • 消息隊列的使用
  • 消息隊列的設計

什麼消息隊列

想象一個場景,線程a斷斷續續的向線程b發送數據,線程b要根據接送到的數據去解析做邏輯處理,但是b線程是優先級比較低的任務,不會去實時處理數據,造成丟數據。如何解決這種問題,可以設想有個大buffer作爲緩衝區,線程a發送的數據送到buffer,線程b從buffer提取數據,這樣就可以解決線程a發送的數據丟失問題。如何管理buffer,消息隊列就是一套管理buffer的軟件。

消息隊列的使用

msg_queue_create(QUEUE * entry, U32 length, U8 * name) 初始化消息隊列
msg_put(QUEUE * entry, MSG * msg, U8 method) 把消息放入消息隊列,method有兩種選擇,一種是先入先出,一種是後入先出。
void msg_get(QUEUE * entry, void *buffer) 取出消息。
void msg_queue_delete(QUEUE *entry) 銷燬消息隊列,釋放內存。

消息隊列的設計

fos的消息隊列是由底層的雙向鏈表串起來使用,消息可以是int、string,插入隊列可以選擇FIFO或是LIFO模式, 任務發送消息,如果消息隊列滿了,那麼任務會主動被掛起阻塞,等待其他任務獲取消息以後纔會被調度。任務取消息,如果消息隊列是空的,那麼任務會被掛起,等待其他任務發送信息給消息隊列纔可以被調度。

具體代碼:https://github.com/dreamflyforever/fos/blob/fos-linux-gcc/kernel/queue.c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章