Main Page
Namespaces
Namespace List
Namespace Members
All
Enumerations
Enumerator
Classes
Class List
Class Members
All
Functions
Variables
Typedefs
Files
File List
File Members
All
Functions
Variables
Macros
src
examples
examples/mutex.cpp
Go to the documentation of this file.
1
8
/*****************************************************************************
9
** Platform Check
10
*****************************************************************************/
11
12
#include <
ecl/config.hpp
>
13
14
/*****************************************************************************
15
** Includes
16
*****************************************************************************/
17
18
#include <iostream>
19
#include <vector>
20
#include "../../include/ecl/threads/mutex.hpp"
21
#include "../../include/ecl/threads/thread.hpp"
22
#include <
ecl/time/sleep.hpp
>
23
24
int
shared_value
= 0;
25
ecl::Mutex
mutex
;
26
27
void
f
() {
28
ecl::Sleep sleep;
29
sleep(1);
30
31
std::cout <<
"Thread: enter blocking"
<< std::endl;
32
mutex
.lock();
33
34
shared_value
= 10;
35
std::cout <<
"Thread: sets shared_value to 10"
<< std::endl;
36
37
mutex
.unlock();
38
std::cout <<
"Thread: leave blocking"
<< std::endl;
39
}
40
41
int
main
() {
42
43
std::cout << std::endl;
44
std::cout <<
"***********************************************************"
<< std::endl;
45
std::cout <<
" Mutex"
<< std::endl;
46
std::cout <<
"***********************************************************"
<< std::endl;
47
std::cout << std::endl;
48
49
std::cout <<
"Lock"
<< std::endl;
50
mutex
.lock();
51
52
std::cout <<
"Unlock"
<< std::endl;
53
mutex
.unlock();
54
55
std::cout <<
"Trylock"
<< std::endl;
56
mutex
.trylock();
57
58
std::cout <<
"Try to lock block already locked"
<< std::endl;
59
if
(
mutex
.trylock()) {
60
std::cout <<
"Abnormal"
<< std::endl;
61
}
else
{
62
std::cout <<
"Failed(Normal)"
<< std::endl;
63
}
64
65
std::cout <<
"Unlock"
<< std::endl;
66
mutex
.unlock();
67
68
std::cout << std::endl;
69
std::cout <<
"***********************************************************"
<< std::endl;
70
std::cout <<
" Synchronization"
<< std::endl;
71
std::cout <<
"***********************************************************"
<< std::endl;
72
std::cout << std::endl;
73
74
ecl::Thread thread_f(
f
);
75
ecl::Sleep sleep;
76
77
std::cout <<
"Main: enter blocking"
<< std::endl;
78
mutex
.lock();
79
sleep(3);
80
81
if
(
shared_value
< 5) {
82
std::cout <<
"shared_value("
<<
shared_value
<<
") is smaller than 5"
<< std::endl;
83
}
else
{
84
std::cout <<
"shared_value("
<<
shared_value
<<
") is larger than 5"
<< std::endl;
85
}
86
87
mutex
.unlock();
88
std::cout <<
"Main: leave blocking"
<< std::endl;
89
90
thread_f.join();
91
92
std::cout << std::endl;
93
std::cout <<
"***********************************************************"
<< std::endl;
94
std::cout <<
" Passed"
<< std::endl;
95
std::cout <<
"***********************************************************"
<< std::endl;
96
std::cout << std::endl;
97
98
return
0;
99
}
sleep.hpp
f
void f()
Definition:
examples/mutex.cpp:27
shared_value
int shared_value
Definition:
examples/mutex.cpp:24
mutex
ecl::Mutex mutex
Definition:
examples/mutex.cpp:25
main
int main()
Definition:
examples/mutex.cpp:41
config.hpp
ecl_threads
Author(s): Daniel Stonier
autogenerated on Wed Mar 2 2022 00:16:43