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

arrow
arrow
    全站熱搜

    西西 發表在 痞客邦 留言(0) 人氣()