OSDN Git Service

Fix some errors in symbol placement.
[pf3gnuchains/pf3gnuchains3x.git] / gold / gold-threads.h
1 // gold-threads.h -- thread support for gold  -*- C++ -*-
2
3 // gold can be configured to support threads.  If threads are
4 // supported, the user can specify at runtime whether or not to
5 // support them.  This provides an interface to manage locking
6 // accordingly.
7
8 // Lock
9 //   A simple lock class.
10
11 #ifndef GOLD_THREADS_H
12 #define GOLD_THREADS_H
13
14 namespace gold
15 {
16
17 class Lock_impl;
18 class Condvar;
19
20 // A simple lock class.
21
22 class Lock
23 {
24  public:
25   Lock();
26   ~Lock();
27
28   // Acquire the lock.
29   void
30   acquire();
31
32   // Release the lock.
33   void
34   release();
35
36  private:
37   // This class can not be copied.
38   Lock(const Lock&);
39   Lock& operator=(const Lock&);
40
41   friend class Condvar;
42   Lock_impl*
43   get_impl() const
44   { return this->lock_; }
45
46   Lock_impl* lock_;
47 };
48
49 // RAII for Lock.
50
51 class Hold_lock
52 {
53  public:
54   Hold_lock(Lock& lock)
55     : lock_(lock)
56   { this->lock_.acquire(); }
57
58   ~Hold_lock()
59   { this->lock_.release(); }
60
61  private:
62   // This class can not be copied.
63   Hold_lock(const Hold_lock&);
64   Hold_lock& operator=(const Hold_lock&);
65
66   Lock& lock_;
67 };
68
69 class Condvar_impl;
70
71 // A simple condition variable class.  It is always associated with a
72 // specific lock.
73
74 class Condvar
75 {
76  public:
77   Condvar(Lock& lock);
78   ~Condvar();
79
80   // Wait for the condition variable to be signalled.  This should
81   // only be called when the lock is held.
82   void
83   wait();
84
85   // Signal the condition variable.  This should only be called when
86   // the lock is held.
87   void
88   signal();
89
90  private:
91   // This class can not be copied.
92   Condvar(const Condvar&);
93   Condvar& operator=(const Condvar&);
94
95   Lock& lock_;
96   Condvar_impl* condvar_;
97 };
98
99 } // End namespace gold.
100
101 #endif // !defined(GOLD_THREADS_H)