Kernel中的process的 pause 與resume 機制,下面是我自己的心得。原理日後有機會在敘述。
以中斷通知
#include <linux/sched.h>
static DECLARE_WAIT_QUEUE_HEAD(wq);
/* condition 為假則入睡眠,為真則跳出(no delay) */
wait_event_interruptible(wq, condition)
/* 喚醒wq中的程式*/
wake_up(&wq);
另一種方式,以完成通知
// 都在completion.h之中
#include <linux/completion.h>
/* 宣告方式,有兩種(其實不只,有空可以去看看) */
// 靜態宣告,此巨集會幫你create一個名叫comp的 completion struct
DECLARE_COMPLETION(comp);
// 動態宣告,通常這類的同步用結構都會在一個大型結構中,這時候就需要利用動態宣告囉
struct completion comp;
init_completion(comp);
/* 簡單的使用方式 */
// process暫停,等待completion
wait_for_completion_interruptible(&comp);
// notify all processes who is wait for completion
complete_all(&comp);
// notify first process who is wait for completion
complete(&comp);