linux驱动中使用顺序锁

     顺序锁与读/写自旋锁类似,只是现在写的优先级高于读操作。事实是:即使載读者正在读的时候也允许写操作的运行。这种策略的好处是写操作不会等待,除非另一个写操作正在进行。其缺点就是读操作不得不多进行几次直到获得有效的副本。更多信息请自行查阅。

1、定义顺序锁

seqlock_t sq_lock;
seqlock_init(&sq_lock);

2、读数据

int value = 0;
unsigned int seq;

do {
    seq = read_seqbegin(&sq_lock);
    value = data;
} while (read_seqretry(&sq_lock, seq));	
	
return value;

3、写数据

write_seqlock(&sq_lock);
data = 1;
write_sequnlock(&sq_lock);	


你可能感兴趣的:(嵌入式/驱动)