wait_queue.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include <common/glib.h>
  3. /**
  4. * @brief 信号量的等待队列
  5. *
  6. */
  7. typedef struct
  8. {
  9. struct List wait_list;
  10. struct process_control_block *pcb;
  11. } wait_queue_node_t;
  12. /**
  13. * @brief 初始化等待队列
  14. *
  15. * @param wait_queue 等待队列
  16. * @param pcb pcb
  17. */
  18. void wait_queue_init(wait_queue_node_t *wait_queue, struct process_control_block *pcb);
  19. /**
  20. * @brief 在等待队列上进行等待
  21. *
  22. * @param wait_queue_head 队列头指针
  23. */
  24. void wait_queue_sleep_on(wait_queue_node_t * wait_queue_head);
  25. /**
  26. * @brief 在等待队列上进行等待,同时释放自旋锁
  27. *
  28. * @param wait_queue_head 队列头指针
  29. */
  30. void wait_queue_sleep_on_unlock(wait_queue_node_t *wait_queue_head,
  31. void *lock);
  32. /**
  33. * @brief 在等待队列上进行等待(允许中断)
  34. *
  35. * @param wait_queue_head 队列头指针
  36. */
  37. void wait_queue_sleep_on_interriptible(wait_queue_node_t * wait_queue_head);
  38. /**
  39. * @brief 唤醒在等待队列的头部的进程
  40. *
  41. * @param wait_queue_head 队列头
  42. * @param state 要唤醒的进程的状态
  43. */
  44. void wait_queue_wakeup(wait_queue_node_t * wait_queue_head, int64_t state);