原子位操作
操作函數的參數是一個指針和一個位號
原子位操作定義在文件中。令人感到奇怪的是位操作函數是對普通的內存地址進行操作的。原子位操作在多數情況下是對一個字長的內存訪問,因而位號該位於0-31之間(在64位機器上是0-63之間),但是對位號的范圍沒有限制。
原子操作中的位操作部分函數如下:
void set_bit(int nr, void *addr) 原子設置addr所指的第nr位
void clear_bit(int nr, void *addr) 原子的清空所指對象的第nr位
void change_bit(nr, void *addr) 原子的翻轉addr所指的第nr位
int test_bit(nr, void *addr) 原子的返回addr位所指對象nr位
int test_and_set_bit(nr, void *addr) 原子設置addr所指對象的第nr位,並返回原先的值
int test_and_clear_bit(nr, void *addr) 原子清空addr所指對象的第nr位,並返回原先的值
int test_and_change_bit(nr, void *addr) 原子翻轉addr所指對象的第nr位,並返回原先的值
unsigned long word = 0;
set_bit(0, &word); /*第0位被設置*/
set_bit(1, &word); /*第1位被設置*/
clear_bit(1, &word); /*第1位被清空*/
change_bit(0, &word); /*翻轉第0位*/