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兩種不同模式。阻塞操作是指在執行裝置操作時若不能...