首页 > 代码库 > lock的两种方式

lock的两种方式

假设现在我们有100个数据项可以读写。有若干个线程,任何一个线程可能对任何一个数据项尽心读写。

但是,如果不同的线程在对同一个数据项进行读写,就可能发生错误。需要使用lock进行控制。

比如线程x要对数据项50进行写,那么首先他获取一个锁,如果获取不到则等待,获取到后,进行操作,然后释放锁。

这个锁是全局的。也就是说,在线程x获取到锁后,线程y要对数据项60进行写时,是无法获取到锁的只能等待。

 

(1)一个解锁方案是,创建100个锁,每个数据项一个。当对某个数据项进行写入时,获取对应的锁。然而,当节点有上百万上亿个呢?

 

(2)此时,系统应该系统一个锁接口lock(data, para)。 data参数表示要锁定的数据,para表示访问模式,比如是共享锁还是排他锁。这样,当任何一个线程要写数据abc时,只需调用lock(abc, para) 来获取锁。此时,其他线程访问数据def可以调用lock(def,para)获取另外的锁。

 

(3)对于文件操作,系统已经提供了这样的接口,  http://man7.org/linux/man-pages/man2/flock.2.html

 #include <sys/file.h>

int flock(int fd, int operation);

(4)对于上面提到的数据项,系统应该提供了锁内存的接口。
 int mlock(const void *addr, size_t len);即是
 

 

lock的两种方式