2012-12-12 18 views
2

我一直在試圖實現一直給我提出問題的Linux system_call,我懷疑這是因爲沒有使用我的代碼進行鎖定(或者可能搶佔) 。在自定義的linux內核系統調用中強制執行代碼段是原子的

我有一個非常頻繁調用的函數(每次調用system_call時會調用此自定義函數)中的關鍵部分,並且它也由system_calls啓動/停止。有什麼方法可以確保每次在Linux內核中進行系統調用時發生的這個關鍵段都是不可搶佔的,並且必須在其他任何事情發生之前完成執行?

回答

2

如果我理解正確的問題,最簡單的方法是使用自旋鎖:

#include <linux/spinlock.h> 

static DEFINE_SPINLOCK(foo_lock); 

int my_system_call(...) 
{ 
     ... 
     /* critical section starts */ 
     spin_lock(&foo_lock); 
     /* critical section goes here */ 
     ... 
     /* critical section ends */ 
     spin_unlock(&foo_lock); 
     ... 
} 

這樣的關鍵部分將是至關重要的部分不重疊的非搶佔和併發執行。

相關問題