DECLARE_WAIT_QUEUE_HEAD(name)使用(linux3.1.0)
目標:初始化一個攝像頭等待佇列頭cam_wait_queue
實現:static DECLARE_WAIT_QUEUE_HEAD(cam_wait_queue)
使用:wait_event_interruptible(cam_wait_queue,ev_cam);
wait_up_interuptible(&cam_wait_queue);
解釋:
include/linux/wait.h #define DECLARE_WAIT_QUEUE_HEAD(name) \ wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
初始化佇列頭name,name結構體:
struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
對結構體的兩個引數初始化:
#define __WAIT_QUEUE_HEAD_INITIALIZER(name) { \
.lock = __SPIN_LOCK_UNLOCKED(name.lock), \
.task_list = { &(name).task_list, &(name).task_list } }
先看第二個引數task_list定義:
next=prev,所以name在佇列頭。struct list_head { struct list_head *next, *prev; };
這裡lock引數的結構體我簡化了一下,只保留了結構體中的一個引數。
lock結構體:
typedef struct spinlock {
union {
struct raw_spinlock rlock;
};
} spinlock_t;
初始化:
#define __SPIN_LOCK_UNLOCKED(lockname) \
(spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
繼續:繼續:#define __SPIN_LOCK_INITIALIZER(lockname) \ { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
{ \
.raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
}
一路追蹤下來,最終
.lock.raw_lock= __ARCH_SPIN_LOCK_UNLOCKED
typedef struct raw_spinlock {
arch_spinlock_t raw_lock;
} raw_spinlock_t;
相關推薦
DECLARE_WAIT_QUEUE_HEAD(name)使用(linux3.1.0)
目標:初始化一個攝像頭等待佇列頭cam_wait_queue 實現:static DECLARE_WAIT_QUEUE_HEAD(cam_wait_queue) 使用:wait_event_interruptible(cam_wait_queue,ev_cam); wai
Egret打包App 修改App名稱和圖標 (Egret4.1.0)
ring 項目 mil src image val 白色 span value 圖標替換位置在項目res下的drawable這些目錄下,用新圖標覆蓋即可。 這裏我用白色圖片替換了白鷺默認的圖片ic_launcher.png 修改App名字,在res->
霸屏瀏覽器(V1.1.0)
軟體介紹 霸屏瀏覽器的作用,就是讓客戶機僅提供Web訪問功能,遮蔽其它所有功能,即不允許客戶機退出瀏覽器介面,或者是使用客戶機的其它功能,也不允許關機、重啟命令。 常常用於觸控式螢幕瀏覽器、自助機瀏覽器。 注意:該軟體需要用管理員許可權執行:安裝後右擊桌面的圖示->點屬性-
spring原始碼學習(5.1.0)——Bean的初始化(下)
目錄 前言 結語 前言 上篇部落格主要介紹了createBean方法,Bean的初始化會有三個主要的方法 createBean:初始化Bean,此時還沒有進行屬性填充 populateBean:進行屬性填充 initializ
angular2(v 1.0)
step1: 先安裝node,去官網下載,不多提了。 step2: 建立專案根資料夾並建立如下目錄: 其中,node_modules可以先不建立,是由後續命令生成的;systemjs.config.js和tsconfig.json是
spring原始碼閱讀(5.1.0)——DefaultSingletonBeanRegistry
目錄 前言 程式碼 屬性 總結 前言 看原始碼才知道spring真的是一個大傢伙,之前不注重方法,看的稀裡糊塗的,這裡寫一點自己看框架原始碼的感想,一個框架通常有許多介面定義,繼承體系比較複雜,首先需要了解框架原始碼的組
配置YOLO2(ubuntu16.04+cuda8.0+opencv3.1.0)
href seconds make fun put ges jre 成功 下載 要求已經安裝好了CUDA 8.0 以及OpenCV3.1.0 YOLO官方網站 配置darknet git clone https://github.com/pjreddie/dark
Storm的StreamID使用樣例(版本1.0.2)
alt constant rate fields olt topology next blog for 隨手嘗試了一下StreamID的的用法。留個筆記。 ==數據樣例== { "Address": "小橋鎮小橋中學對面", "CityCode": "
Oracle 12c(12.1.0.5)OEM server agent 安裝配置
stat oem www 忽略 符號 cin .com 至少 打開 註意: 此文檔為生產上操作文檔,省略了IP,oracle用戶server,agent 端至少需要sudo,ping,ssh,創建目錄權限。 一、安裝要求 1.1. 系統情況一覽 IP 數據庫
C# 語言歷史版本特性(C# 1.0到C# 8.0匯總)
fun github mat 發的 初始 The locks urn 線圖 原文:C# 語言歷史版本特性(C# 1.0到C# 8.0匯總)歷史版本 C#作為微軟2000年以後.NET平臺開發的當家語言,發展至今具有17年的歷史,語言本身具有豐富的特性,微軟對其更新支持
CCF-棋局評估 201803-04(版本 2.0)------(之前寫了一個臃腫的1.0版 ,還沾沾自喜 233)
核心 color namespace ace for play class 一個 while 核心 : 博弈搜索樹 雙方得分互為相反數 dfs (x,y,player): 玩家player下完(x,y)之後的得分最大值 易錯: 先判斷輸贏,再判斷
Windows下編譯Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)
按照官網給出CUDA9.1+cudnn7.0+OpenCV 3.1.0的版本安裝 1 安裝CUDA 9.1 預設位置安裝後發現環境變數自動加入了path 2 安裝cudnn 7.0.5 for cuda 9.1 下載地址:https://dev
各個 C# 版本的主要特性、釋出日期和釋出方式(C# 1.0 - 7.3)
原文 各個 C# 版本的主要特性、釋出日期和釋出方式(C# 1.0 - 7.3) 本文收集各個 C# 版本的主要特性、釋出日期和釋出方式。 C# 8.0 尚在預覽版本 C# 7.3 2018 年 5 月 隨 Visual Studio 2017 v15.7 釋出 C#
TensorFlow版本更新(從1.0升到1.8),查詢版本
先設定pip下載優先選擇清華映象,這樣下載快很多 pip install pip -U pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 安裝命令: 對於 GPU 版本: (也可以用pip3)
spring原始碼學習(5.1.0版本)——Bean的初始化(中)
目錄 前言 createBean 有自定義TargetSource代理類的生成 resolveBeforeInstantiation applyBeanPostProcessorsBeforeInstantiation postProcessBeforeIn
spring原始碼學習(5.1.0版本)——Bean的初始化(上)
目錄 前言 源頭 preInstantiateSingletons方法 getBean(String beanName) doGetBean getObjectForBeanInstance getObjectFromFactoryBean doGe
HBase叢集的搭建(版本:2.1.0)
(004)HBase是一個在HDFS上開發的面向列的分散式資料庫。如果需要實時地隨機訪問超大規模資料集,就可以使用HBase這一Hadoop應用了 HBase叢集的搭建 前提條件 Hadoop叢集 ZooKeeper叢集 JDK 原料 h
自己動手實現一個簡單的Mybatis(初級版本1.0)
手寫Mybatis-v1.0 原始碼連結(包括v1.0與v2.0): https://github.com/staticLin/customMyBatis.git 從上一個文章 ---Mybatis概述中瞭解到了Mybatis的主要架構與底層原理流程,結尾給出了一個巨集觀流程圖,可
vue.js篩選功能(基於1.0版本)
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" con
MySQL---高可用(修改版1.0)
MySQL高可用 因為主從複製是由Master伺服器負責寫操作,因而會存在單點失敗的隱患,所以需要提高HA高可用性 本文介紹了以下方法實現MySQL的高可用性 一、MHA高可用(Master High Availability) 原理:建立一個Manager管理者,它