本文共 656 字,大约阅读时间需要 2 分钟。
current代表当前进程,源代码如下:
static inline struct task_struct *get_current()
#define current (get_current())
实现阻塞方法:
实现阻塞: 默认情况,大部分的函数默认都是阻塞 scanf()-- fgets() accept(); read/recv/recvfrom 0---需要一个等待队列头 struct __wait_queue_head wait_queue_head_t; init_waitqueue_head(struct wait_queue_head_t *q) // 参数1---表示等待队列头 // 参数2---表示一个条件--如果为假,就在此休眠,如果为真,就不休眠 1,根据条件可以让进程进入到休眠状态
wait_event_interruptible(struct wait_queue_head_t wq, int condition)
set_current_state(TASK_INTERRUPTIBLE); 等同
add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
schedule(void);
三个函数等同于: wait_event_interruptible(queue,condition);
2, 资源可达的时候需要唤醒 wake_up_interruptible(wait_queue_head_t *q)转载地址:http://lemws.baihongyu.com/