SystemC 3.0.0
Accellera SystemC proof-of-concept library
sc_mutex_if.h
Go to the documentation of this file.
1/*****************************************************************************
2
3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
4 more contributor license agreements. See the NOTICE file distributed
5 with this work for additional information regarding copyright ownership.
6 Accellera licenses this file to you under the Apache License, Version 2.0
7 (the "License"); you may not use this file except in compliance with the
8 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, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15 implied. See the License for the specific language governing
16 permissions and limitations under the License.
17
18 *****************************************************************************/
19
20/*****************************************************************************
21
22 sc_mutex_if.h -- The sc_mutex_if interface class.
23
24 Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21
25
26 CHANGE LOG IS AT THE END OF THE FILE
27 *****************************************************************************/
28
29#ifndef SC_MUTEX_IF_H
30#define SC_MUTEX_IF_H
31
33
34namespace sc_core {
35
36// ----------------------------------------------------------------------------
37// CLASS : sc_mutex_if
38//
39// The sc_mutex_if interface class.
40// ----------------------------------------------------------------------------
41
43: virtual public sc_interface
44{
45public:
46
47 // the classical operations: lock(), trylock(), and unlock()
48
49 // blocks until mutex could be locked
50 virtual int lock() = 0;
51
52 // returns -1 if mutex could not be locked
53 virtual int trylock() = 0;
54
55 // returns -1 if mutex was not locked by caller
56 virtual int unlock() = 0;
57
58protected:
59
60 // constructor
61
63 {}
64
65private:
66
67 // disabled
68 sc_mutex_if( const sc_mutex_if& );
69 sc_mutex_if& operator = ( const sc_mutex_if& );
70};
71
72// ----------------------------------------------------------------------------
73// CLASS : sc_scoped_lock
74//
75// The sc_scoped_lock class to lock (and automatically release) a mutex.
76// ----------------------------------------------------------------------------
77
78//template< typename Lockable = sc_mutex_if >
80{
81public:
82 //typedef Lockable lockable_type;
84
85 explicit
87 : m_ref(mtx)
88 , m_active(true)
89 {
90 m_ref.lock();
91 }
92
93 bool release()
94 {
95 if( m_active )
96 {
97 m_ref.unlock();
98 m_active = false;
99 return true;
100 }
101 return false;
102 }
103
105 {
106 release();
107 }
108
109private:
110 // disabled
112 sc_scoped_lock& operator=( const sc_scoped_lock& );
113
114 lockable_type& m_ref;
115 bool m_active;
116};
117
118} // namespace sc_core
119
120//$Log: sc_mutex_if.h,v $
121//Revision 1.4 2011/08/26 20:45:41 acg
122// Andy Goodrich: moved the modification log to the end of the file to
123// eliminate source line number skew when check-ins are done.
124//
125//Revision 1.3 2011/04/19 02:36:26 acg
126// Philipp A. Hartmann: new aysnc_update and mutex support.
127//
128//Revision 1.2 2011/02/18 20:23:45 acg
129// Andy Goodrich: Copyright update.
130//
131//Revision 1.1.1.1 2006/12/15 20:20:04 acg
132//SystemC 2.3
133//
134//Revision 1.2 2006/01/03 23:18:26 acg
135//Changed copyright to include 2006.
136//
137//Revision 1.1.1.1 2005/12/19 23:16:43 acg
138//First check in of SystemC 2.1 into its own archive.
139//
140//Revision 1.8 2005/06/10 22:43:55 acg
141//Added CVS change log annotation.
142//
143
144#endif
145
146// Taf!
#define SC_API
Definition: sc_cmnhdr.h:148
virtual int lock()=0
virtual int unlock()=0
virtual int trylock()=0
sc_scoped_lock(lockable_type &mtx)
Definition: sc_mutex_if.h:86
sc_mutex_if lockable_type
Definition: sc_mutex_if.h:83