自己写个类似于BDB的数据库?

其实本来我只是需要一个队列系统,所需要的数据存储和并发控制、同步功能在BDB中都有,一切都很完美。但是,最初遇见的是环境的问题,因一个进程异常退出而导致要重新启动所有使用该环境的进程。这个问题刚解决,又遇到了死锁的问题。BDB我只懂皮毛,不知道死锁如何产生的,只知道在shell下运行db_deadlock就可以让陷入死锁的程序继续运行下去。神啊!
BDB的同步还存在一个问题,就是多个进程/线程在等待同一个queue类型的数据库的数据的时候,当一个数据被塞进去后,是所有在等待的进程都被唤醒。怎么办?
最基本的思想,就是通过mmap把一个文件映射到内存中来,然后这个文件分为两部分,head和data。head中是一些meta data,诸如counter of items、mutex等,后面是一系列的data。
每次打开前,需要获取一个跨进程的锁,然后检查meta data部分的有效性,如果出错,那么尝试恢复或者退出。
对于queue这样的等待事件,最好是用 posix semaphores 来通知/唤醒。
。。。。
一些零碎的想法,嗯。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥