SystemC
3.0.0
Accellera SystemC proof-of-concept library
sysc
communication
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
32
#include "
sysc/communication/sc_interface.h
"
33
34
namespace
sc_core
{
35
36
// ----------------------------------------------------------------------------
37
// CLASS : sc_mutex_if
38
//
39
// The sc_mutex_if interface class.
40
// ----------------------------------------------------------------------------
41
42
class
SC_API
sc_mutex_if
43
:
virtual
public
sc_interface
44
{
45
public
:
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
58
protected
:
59
60
// constructor
61
62
sc_mutex_if
()
63
{}
64
65
private
:
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 >
79
class
SC_API
sc_scoped_lock
80
{
81
public
:
82
//typedef Lockable lockable_type;
83
typedef
sc_mutex_if
lockable_type
;
84
85
explicit
86
sc_scoped_lock
(
lockable_type
& mtx )
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
104
~sc_scoped_lock
()
105
{
106
release();
107
}
108
109
private
:
110
// disabled
111
sc_scoped_lock
(
const
sc_scoped_lock
& );
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!
SC_API
#define SC_API
Definition:
sc_cmnhdr.h:148
sc_interface.h
sc_core
Definition:
sc_buffer.h:36
sc_core::sc_interface
Definition:
sc_interface.h:48
sc_core::sc_mutex_if
Definition:
sc_mutex_if.h:44
sc_core::sc_mutex_if::lock
virtual int lock()=0
sc_core::sc_mutex_if::sc_mutex_if
sc_mutex_if()
Definition:
sc_mutex_if.h:62
sc_core::sc_mutex_if::unlock
virtual int unlock()=0
sc_core::sc_mutex_if::trylock
virtual int trylock()=0
sc_core::sc_scoped_lock
Definition:
sc_mutex_if.h:80
sc_core::sc_scoped_lock::release
bool release()
Definition:
sc_mutex_if.h:93
sc_core::sc_scoped_lock::~sc_scoped_lock
~sc_scoped_lock()
Definition:
sc_mutex_if.h:104
sc_core::sc_scoped_lock::sc_scoped_lock
sc_scoped_lock(lockable_type &mtx)
Definition:
sc_mutex_if.h:86
sc_core::sc_scoped_lock::lockable_type
sc_mutex_if lockable_type
Definition:
sc_mutex_if.h:83
Generated on Fri Aug 16 2024 16:36:33 for SystemC by
1.9.4