My Project
Public Member Functions | Private Member Functions | Private Attributes | Friends
Lock Class Reference

#include <thread.h>

Public Member Functions

 Lock (bool rec=false)
 
 ~Lock ()
 
void lock ()
 
void unlock ()
 
bool is_locked ()
 

Private Member Functions

void resume_lock (int l)
 
int break_lock ()
 

Private Attributes

pthread_mutex_t mutex
 
Thread owner
 
int locked
 
bool recursive
 

Friends

class ConditionVariable
 

Detailed Description

Definition at line 17 of file thread.h.

Constructor & Destructor Documentation

◆ Lock()

Lock::Lock ( bool  rec = false)
inline

Definition at line 36 of file thread.h.

36  {
37  extern pthread_t no_thread;
38  pthread_mutex_init(&mutex, NULL);
39  locked = 0;
40  recursive = rec;
41  owner = no_thread;
42  }
Thread owner
Definition: thread.h:21
pthread_mutex_t mutex
Definition: thread.h:19
int locked
Definition: thread.h:22
bool recursive
Definition: thread.h:23
#define NULL
Definition: omList.c:12
pthread_t no_thread
Definition: thread.cc:16

◆ ~Lock()

Lock::~Lock ( )
inline

Definition at line 43 of file thread.h.

43  {
44  pthread_mutex_destroy(&mutex);
45  }

Member Function Documentation

◆ break_lock()

int Lock::break_lock ( )
inlineprivate

Definition at line 28 of file thread.h.

28  {
29  extern pthread_t no_thread;
30  int result = locked;
31  owner = no_thread;
32  locked = 0;
33  return result;
34  }
return result
Definition: facAbsBiFact.cc:75

◆ is_locked()

bool Lock::is_locked ( )
inline

Definition at line 68 of file thread.h.

68  {
69  return locked != 0 && owner == pthread_self();
70  }

◆ lock()

void Lock::lock ( )
inline

Definition at line 46 of file thread.h.

46  {
47  Thread self = pthread_self();
48  if (owner == self) {
49  if (locked && !recursive)
50  ThreadError("locking mutex twice");
51  }
52  else
53  pthread_mutex_lock(&mutex);
54  owner = self;
55  locked++;
56  }
void ThreadError(const char *message)
Definition: thread.cc:18
pthread_t Thread
Definition: thread.h:11

◆ resume_lock()

void Lock::resume_lock ( int  l)
inlineprivate

Definition at line 24 of file thread.h.

24  {
25  owner = pthread_self();
26  locked = l;
27  }
int l
Definition: cfEzgcd.cc:100

◆ unlock()

void Lock::unlock ( )
inline

Definition at line 57 of file thread.h.

57  {
58  extern pthread_t no_thread;
59  Thread self = pthread_self();
60  if (owner != self)
61  ThreadError("unlocking unowned lock");
62  locked--;
63  if (locked == 0) {
64  owner = no_thread;
65  pthread_mutex_unlock(&mutex);
66  }
67  }

Friends And Related Function Documentation

◆ ConditionVariable

friend class ConditionVariable
friend

Definition at line 20 of file thread.h.

Field Documentation

◆ locked

int Lock::locked
private

Definition at line 22 of file thread.h.

◆ mutex

pthread_mutex_t Lock::mutex
private

Definition at line 19 of file thread.h.

◆ owner

Thread Lock::owner
private

Definition at line 21 of file thread.h.

◆ recursive

bool Lock::recursive
private

Definition at line 23 of file thread.h.


The documentation for this class was generated from the following file: