• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2011 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  #ifndef ART_RUNTIME_OBJECT_LOCK_H_
18  #define ART_RUNTIME_OBJECT_LOCK_H_
19  
20  #include "base/locks.h"
21  #include "base/macros.h"
22  #include "handle.h"
23  
24  namespace art {
25  
26  class Thread;
27  
28  template <typename T>
29  class ObjectLock {
30   public:
31    ObjectLock(Thread* self, Handle<T> object) REQUIRES_SHARED(Locks::mutator_lock_);
32  
33    ~ObjectLock() REQUIRES_SHARED(Locks::mutator_lock_);
34  
35    void WaitIgnoringInterrupts() REQUIRES_SHARED(Locks::mutator_lock_);
36  
37    void Notify() REQUIRES_SHARED(Locks::mutator_lock_);
38  
39    void NotifyAll() REQUIRES_SHARED(Locks::mutator_lock_);
40  
41   private:
42    Thread* const self_;
43    Handle<T> const obj_;
44  
45    DISALLOW_COPY_AND_ASSIGN(ObjectLock);
46  };
47  
48  template <typename T>
49  class ObjectTryLock {
50   public:
51    ObjectTryLock(Thread* self, Handle<T> object) REQUIRES_SHARED(Locks::mutator_lock_);
52  
53    ~ObjectTryLock() REQUIRES_SHARED(Locks::mutator_lock_);
54  
Acquired()55    bool Acquired() const {
56      return acquired_;
57    }
58  
59   private:
60    Thread* const self_;
61    Handle<T> const obj_;
62    bool acquired_;
63  
64  
65    DISALLOW_COPY_AND_ASSIGN(ObjectTryLock);
66  };
67  
68  
69  }  // namespace art
70  
71  #endif  // ART_RUNTIME_OBJECT_LOCK_H_
72