leveldb源代码中mutex_.AssertHeld()的含义是什么?

时间:2013-09-05 03:09:03

标签: leveldb

最近我读了leveldb的来源,源网址是https://leveldb.googlecode.com/files/leveldb-1.13.0.tar.gz

当我读到db / db_impl.cc时,会出现以下代码:

mutex_.AssertHeld()

我将它关注到文件port / port_posix.h中,我发现以下内容:

void AssertHeld() { } 

然后我在源目录中grep,但是找不到AssertHeld()的任何其他实现了。 所以这是我的问题,mutex_.AssertHeld()在db / db_impl.cc中做了什么? THX

1 个答案:

答案 0 :(得分:0)

正如您所看到的,它在默认实现中没有任何作用。该函数似乎是一个占位符,用于检查特定线程是否包含互斥锁,如果不存在,则可选择中止。这相当于我们用于变量的常规断言,但应用于互斥锁。

我认为它尚未实现的原因是我们没有等效的轻量级函数来断言线程是否在默认实现中使用的pthread_mutex_t中持有锁。具有该功能的某些平台可以将此实现作为移植过程的一部分来填充。在线搜索我确实在leveldb的windows端口找到了这个功能的一些实现。我可以看到一种方法来实现它,使用pthread_mutex_t上的包装类并设置某种线程id变量来指示当前持有互斥锁的哪个线程,但是必须在可能出现的竞争条件下仔细实现它