一、简介
分布式同步是Zookeeper的功能之一,但Zookeeper的分布式同步(分布式锁)功能并非以直接的接口呈现的。开发者需要额外地基于Zookeeper的节点(node)的分布式同步特性来实现分布式锁的接口。
本文将提供基于基于ZooKeeper的分布式锁的C++接口及实现,实现中用到了部分C++11特性。另外,本实现使用的是经过封装的ZooKeeper接口,本文只列出这些ZooKeeper封装接口,而不提供ZooKeeper封装接口的实现代码。读者可以依理使用ZooKeeper原生接口,或自己封装ZooKeeper接口。
二、基于ZooKeeper分布式锁的实现流程
1、在ZooKeeper指定节点下创建临时顺序节点node_n;
2、获取指定节点下所有子节点(children node);
3、对子节点按节点自增序号从小到大排序;
4、判断第1步创建的节点是否为排序子节点的第一个子节点,如是,则获取锁,如不是,则监听比第1步创建的节点小的那个节点的删除事件;
5、若监听事件生效,则回到第2步重新进行判断,直到获取到锁。
三、已封装的ZooKeeper接口声明
int32_t Init(const std::string &hosts, const std::string &root_path = "/", const clientid_t *client_id = NULL);//ZooKeeper始化接口
int32_t Connect(std::shared_pt