阻塞與非阻塞知識點總結

2021-07-26 15:35:00 字數 813 閱讀 2200

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)

阻塞與非阻塞賦值

李秋鳳,華清遠見嵌入式學院 講師。稍微接觸過verilog hdl的都對阻塞與非阻塞賦值略知一二,也是我們經常強調的重點之一,在課堂上還是有學員問什麼不一樣呢,為什麼我用阻塞賦值也能得出正確的結果呢?在編寫可綜合 的時候,建議大家不要忘了開啟rtl網表檢視器看看我們自己綜合出來的電路是不是自己想要的...

socket connect 阻塞與非阻塞

socket函式生成socket結構體時,預設生成的socket是阻塞的 如果我們使用connect去連線伺服器,而這時網路出現故障,則connect預設等候很長一段時間然後返回錯誤 我們可以設定socket為非阻塞模式,可以設定一定的等候時間,如果在設定的等候時間內connect失敗,則我們判定網...

阻塞與非阻塞I O

還記得上篇 我們講到的是linux中併發控制訪問的手段有哪些?原子 訊號量 自旋鎖 互斥體。這是為了保護臨界區的資源,是多個程序對共享資源的併發訪問的一種處理手段。但是,在驅動程式中,我們常常為了支援使用者空間對裝置的靈活訪問,引入了阻塞與非阻塞i o兩種不同模式。阻塞操作是指在執行裝置操作時若不能...