多线程使用时候的锁

大耗子 2020年02月24日 344次浏览

信号量

struct semaphore sem;

读写信号量

struct rw_semaphore rwsem;

一个线程告诉另一个线程,某个工作已经完成

struct comletion mycomletion;

自旋锁

spinlock_t mylock;

读写自旋锁

rwlock_t my_rwlock;

原子变量(自带锁),保证读写时候不会被改变

atomic_t v;
原子位操作
void set_bit(nr, void *addr);
void clear_bit();
void change_bit();
...

seqlock

保护的资源很小,很简单,会频繁被访问的而且写入访问很少发生,且必须快速时候
读自由,写入时,读无权,无法保护指针
seqlock_t lock;

RCU(类似seqlock,但性能更高,被保护的资源应该通过指针访问)

rcu_read_lock();
...
something;
...
rcu_read_unlock();