标签:系统 int abc inux 文件操作 opera 需要 pre include
假设现在我们有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);即是
标签:系统 int abc inux 文件操作 opera 需要 pre include
原文地址:http://www.cnblogs.com/bettersky/p/7141426.html