linux併發控制例子

2021-06-18 00:13:03 字數 2029 閱讀 2347

例項篇:1.定義帶有裝置併發控制方案的結構體(諸如訊號量,自旋鎖等,反正前邊那麼多了)

我是一名高手,告訴大家乙個高手的習慣,就是喜歡也習慣把將某裝置所使用的自旋鎖,訊號量等輔助手段也放到裝置結構體中,就像下邊這樣:

struct csyncontrol_dev

然後,將訊號量的初始化工作放到模組初始化部分裡

int csycontrol_init(void)

以後在訪問csyncontrol_dev中的共享資源時,需要首先獲取這個訊號量,訪問完成後,隨即釋放掉這個訊號量,比如下面的,寫操作:

//csycontrol_read函式

static ssize_t csycontrol_read(struct file *filp,char __user *buf, size_t size, loff_t *ppos)

if (copy_to_user(buf,(void *)(dev->mem + p),count))

else

up(&dev->sem); //釋放訊號量

return ret;

}//csycontrol_write

static ssize_t csycontrol_write(struct file *filp, const

char __user *buf,size_t size, loff_t *ppos)

if (copy_from_user(dev->mem + p,buf, count))

ret = -efault;

else

up(&dev->sem); //釋放訊號量

return ret;

}

//csycontrol_ioctl函式

static

int csycontrol_ioctl(struct inode *inodep, struct file *filp,unsigned

int cmd, unsigned

long arg)

memset(dev->mem, 0,globalmem_size);
up(&dev->sem); //釋放訊號量

printk(kern_info "globalmem is set to zero\n");

break;

default:

return - einval;//其他不支援的命令

} return 0;

}

**部分也講完了,說句真的,心裡真是不平衡,前邊講了那麼多,這裡體現的時候它怎麼就只有那兩行**呢..

各種同步機制的比較 型別

機制應用場合

spinlock

使用忙等方法,程序不掛起

(1)用於多處理器間共享資料

(2)在可搶占的核心執行緒裡共享資料

(3)自旋鎖適合於保持時間非常短的情況,它可以在任何上下文使用,比如中斷上下文

訊號量阻塞式等待,程序掛起

(1)適合於共享區保持時間教長的情況

(2)只能用於程序上下文

原子操作

資料的原子訪問

(1)共享簡單的資料型別:整型,比特性

(2)適合高效率的場合

rwlock

特殊的自旋鎖

(1)允許同時讀共享資源,但只能有乙個寫

(2)讀優先於寫,讀寫不能同時

順序鎖一種免鎖機制,基於訪問計數

(1)允許同時讀共享資源,但只能有乙個寫

(2)寫優先於讀,讀寫不能同時

rcu通過副本的免鎖訪問

(1)對讀佔主要的場合提供高效能

(2)讀訪問不必獲取鎖,不必執行原子操作或禁止中斷

關閉中斷

通過禁止中斷的手段,排除單處理器上的併發,會導致中斷延遲

(1)中斷與正常程序共享資料

(2)多個中斷共享資料

(3)臨界區一般很短

linux併發控制

一.概念 1.併發 concurrency 指多個執行單元同時,並行被執行。2.併發的執行單元對共享資源,比如說,硬體資源,全域性變數,靜態變數等 訪問很容易導致競態 race conditions 舉個簡單事例,古代皇帝有很多妃子,皇帝第乙個時辰是宜妃的,第二個時辰是萱妃,最後時間是皇后的,這是原...

Linux併發控制

目錄 併發和競態 編譯亂序和執行亂序 中斷遮蔽 原子操作 位原子操作 自旋鎖訊號量 互斥體完成量 1.併發是多個執行單元同時並行的執行。2.競態是指併發操作對共享資源的訪問。競態的發生情況如下 1.對稱多處理器 smp 的多個cpu的程序 中斷之間的併發為核間併發。2.單個cpu內的多個程序併發訪問...

linux 併發控制總結

atomic t atomic t atom atomic init 1 atomic dec and test atom atomic inc atom spin lock t spinlock t lock spin lock init lock define spinlock lock spi...