Hatena::Grouptechmemo

msyktの日記

2011-08-11TokyoCabinetのTDBのコードを読む

[TCTDB]tctdbsetmutex

21:46

/* Set mutual exclusion control of a table database object for threading. */
bool tctdbsetmutex(TCTDB *tdb){
  assert(tdb);
  if(!TCUSEPTHREAD) return true;
  if(tdb->mmtx || tdb->open){
    tctdbsetecode(tdb, TCEINVALID, __FILE__, __LINE__, __func__);
    return false;
  }
  TCMALLOC(tdb->mmtx, sizeof(pthread_rwlock_t));
  bool err = false;
  if(pthread_rwlock_init(tdb->mmtx, NULL) != 0) err = true;  if(err){
    TCFREE(tdb->mmtx);
    tdb->mmtx = NULL;
    return false;
  }
  return tchdbsetmutex(tdb->hdb);
}
  1. pthreadを使ってなければなければ何もしない
  2. mutexが既に用意されているか、open済みであればエラー
  3. mutexのヒープ領域を確保し、初期化
  4. hash databaseのmutexを準備
#if defined(_MYNOPTHREAD)
=>efine TCUSEPTHREAD   0
#else
#define TCUSEPTHREAD   1
#endif