查看tt 1.4.46的代碼發現加鎖的地方是這樣寫的 if(pthread_rwlock_rdlock((pthread_rwlock_t *)mdb->mmtxs + mi) != 0) return NULL; 這句話放在了讀接口那里,可見如果加鎖失敗就拿不到數了,
寫數據的接口也是這個寫法,
bool tcmdbputproc(TCMDB *mdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz,
TCPDPROC proc, void *op){
assert(mdb && kbuf && ksiz >= 0 && proc);
unsigned int mi;
TCMDBHASH(mi, kbuf, ksiz);
if(pthread_rwlock_wrlock((pthread_rwlock_t *)mdb->mmtxs + mi) != 0) return false;
bool rv = tcmapputproc(mdb->maps[mi], kbuf, ksiz, vbuf, vsiz, proc, op);
pthread_rwlock_unlock((pthread_rwlock_t *)mdb->mmtxs + mi);
return rv;
}
所以寫數據也可能不知原因的寫入失敗。但是這樣有個好處就是看上去快
不知道作者出於什么目的
