Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
30 ashish 1
/*
2
 * Licensed to the Apache Software Foundation (ASF) under one
3
 * or more contributor license agreements. See the NOTICE file
4
 * distributed with this work for additional information
5
 * regarding copyright ownership. The ASF licenses this file
6
 * to you under the Apache License, Version 2.0 (the
7
 * "License"); you may not use this file except in compliance
8
 * with the License. You may obtain a copy of the License at
9
 *
10
 *   http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing,
13
 * software distributed under the License is distributed on an
14
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
 * KIND, either express or implied. See the License for the
16
 * specific language governing permissions and limitations
17
 * under the License.
18
 */
19
 
20
#ifndef _THRIFT_CONCURRENCY_MONITOR_H_
21
#define _THRIFT_CONCURRENCY_MONITOR_H_ 1
22
 
23
#include "Exception.h"
24
 
25
namespace apache { namespace thrift { namespace concurrency {
26
 
27
/**
28
 * A monitor is a combination mutex and condition-event.  Waiting and
29
 * notifying condition events requires that the caller own the mutex.  Mutex
30
 * lock and unlock operations can be performed independently of condition
31
 * events.  This is more or less analogous to java.lang.Object multi-thread
32
 * operations
33
 *
34
 * Note that all methods are const.  Monitors implement logical constness, not
35
 * bit constness.  This allows const methods to call monitor methods without
36
 * needing to cast away constness or change to non-const signatures.
37
 *
38
 * @version $Id:$
39
 */
40
class Monitor {
41
 
42
 public:
43
 
44
  Monitor();
45
 
46
  virtual ~Monitor();
47
 
48
  virtual void lock() const;
49
 
50
  virtual void unlock() const;
51
 
52
  virtual void wait(int64_t timeout=0LL) const;
53
 
54
  virtual void notify() const;
55
 
56
  virtual void notifyAll() const;
57
 
58
 private:
59
 
60
  class Impl;
61
 
62
  Impl* impl_;
63
};
64
 
65
class Synchronized {
66
 public:
67
 
68
 Synchronized(const Monitor& value) :
69
   monitor_(value) {
70
   monitor_.lock();
71
  }
72
 
73
  ~Synchronized() {
74
    monitor_.unlock();
75
  }
76
 
77
 private:
78
  const Monitor& monitor_;
79
};
80
 
81
 
82
}}} // apache::thrift::concurrency
83
 
84
#endif // #ifndef _THRIFT_CONCURRENCY_MONITOR_H_