gem5  v21.2.1.1
sc_semaphore.cc
Go to the documentation of this file.
1 /*
2  * Copyright 2018 Google, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met: redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer;
8  * redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #include <string>
29 
32 #include "systemc/ext/core/sc_module.hh" // for sc_gen_unique_name
34 
35 namespace sc_core
36 {
37 
39  sc_semaphore(sc_gen_unique_name("semaphore"), value)
40 {}
41 
42 sc_semaphore::sc_semaphore(const char *_name, int value) :
43  sc_interface(), sc_semaphore_if(), sc_object(_name), _value(value)
44 {
45  if (value < 0) {
46  std::string msg = "semaphore '" + std::string(name()) + "'";
48  }
49 }
50 
51 int
53 {
54  while (trywait() == -1)
56  return 0;
57 }
58 
59 int
61 {
62  if (!_value)
63  return -1;
64 
65  _value--;
66  return 0;
67 }
68 
69 int
71 {
72  if (_value++ == 0)
73  posted.notify();
74  return 0;
75 }
76 
77 int sc_semaphore::get_value() const { return _value; }
78 
79 } // namespace sc_core
sc_core::sc_semaphore::trywait
virtual int trywait()
Definition: sc_semaphore.cc:60
sc_core
Definition: messages.cc:31
sc_core::sc_interface
Definition: sc_interface.hh:37
sc_core::sc_semaphore
Definition: sc_semaphore.hh:38
messages.hh
sc_core::SC_ID_INVALID_SEMAPHORE_VALUE_
const char SC_ID_INVALID_SEMAPHORE_VALUE_[]
Definition: messages.cc:58
SC_REPORT_ERROR
#define SC_REPORT_ERROR(msg_type, msg)
Definition: sc_report_handler.hh:127
sc_core::sc_semaphore::post
virtual int post()
Definition: sc_semaphore.cc:70
sc_core::sc_semaphore::posted
sc_gem5::InternalScEvent posted
Definition: sc_semaphore.hh:60
sc_core::sc_semaphore::_value
int _value
Definition: sc_semaphore.hh:59
sc_core::sc_gen_unique_name
const char * sc_gen_unique_name(const char *seed)
Definition: sc_module.cc:820
sc_core::sc_object
Definition: sc_object.hh:50
sc_module.hh
sc_core::sc_event::notify
void notify()
Definition: sc_event.cc:337
sc_report_handler.hh
sc_semaphore.hh
sc_core::wait
void wait()
Definition: sc_module.cc:653
sc_core::sc_object::name
const char * name() const
Definition: sc_object.cc:44
sc_core::sc_semaphore_if
Definition: sc_semaphore_if.hh:36
sc_core::sc_semaphore::get_value
virtual int get_value() const
Definition: sc_semaphore.cc:77
sc_core::sc_semaphore::wait
virtual int wait()
Definition: sc_semaphore.cc:52
sc_core::sc_semaphore::sc_semaphore
sc_semaphore(int)
Definition: sc_semaphore.cc:38

Generated on Wed May 4 2022 12:14:03 for gem5 by doxygen 1.8.17