ttserver发现的问题,可能是故意这么弄的,如果不是故意的,那就需要我们注意了

查看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;
}

所以写数据也可能不知原因的写入失败。但是这样有个好处就是看上去快

不知道作者出于什么目的

 

 

posted @ 2012-12-17 17:34  安子  阅读(14649)  评论(0)    收藏  举报