 åΥåɤˤĤ

 ߤGDKåglobalåΣָåϥ
ܤƤåΥåڤˤǤФ褤Ȥ
ɤʤΤǻʤäѥʡ


 ɤ٤
֤åߤ˾ϿƹԤνȰ
ʤäƤabort()ɤ

Ūˤϡͽpthread_key_create()ǷƤkeyѤơ
pthread_setspecific()ˤƥåɤthread specific data(TSD)ΰ
ָߥåLock֥ȤؤΥݥפ򵭲Ƥ
Lock(åA)åˤλƱ˥åƤLock֥
ȷpthread_getspecific()ѤƼХʥǡ
ΰ⤷Lock֥ȼȤ˵Ͽ롣


 
 LockĤΥեɤɲä롣
list<Lock *> predecessor_locks;
list<Lock *> successor_locks;

Lock::lock()ˤơthisåcurrentåɤݻƤ
åΤ줫Υåpredecessor_locks
thisäLOR

successor_locksthisdestructݻ줿å֥ȷ
this˴뤳ȤΤŪѤ롣destructˤ
predecessor_locksˤĤƤƱͤ˻Ѥthis˴뤳Ȥthis
successor_locksݻƤå֥ȷΤ롣

 ƥåɤݻ륪֥

typedef list<Lock *> LockList;

class ThreadStatus
{
  friend class LockManager;

private:
  string description;
  LockList holding_locks;
  Lock *waiting_lock;


public:
  ThreadStatus(const char *description);
  virtual ~ThreadStatus();
  virtual const char *get_description();
  virtual void dump_status();

  inline LockList::const_iterator holding_locks_begin()
  { return holding_locks.begin(); }
  inline LockList::const_iterator holding_locks_end()
  { return holding_locks.end(); }
  void notify_locked(Lock *lock);
  void notify_unlocked(Lock *lock);
  void notify_waited(Monitor *lock);
  void notify_signaled(Monitor *lock);
};
