FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
thread/test/test_latch.cpp at develop · boostorg/thread · GitHub
boostorg
/
thread
Public
Notifications
You must be signed in to change notification settings
Fork
171
Star
213
Code
Issues
77
Pull requests
13
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
thread
/
test
/
test_latch.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
70 lines (55 loc) · 1.49 KB
Breadcrumbs
thread
/
test
/
test_latch.cpp
Copy path
File metadata and controls
70 lines (55 loc) · 1.49 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
Distributed under the Boost Software License, Version 1.0. (See
//
accompanying file LICENSE_1_0.txt or copy at
//
http://www.boost.org/LICENSE_1_0.txt)
//
(C) Copyright 2013 Vicente J. Botet Escriba
#
define
BOOST_THREAD_PROVIDES_INTERRUPTIONS
#
include
<
boost/thread/detail/config.hpp
>
#
include
<
boost/thread/thread.hpp
>
#
include
<
boost/thread/latch.hpp
>
#
include
<
boost/core/lightweight_test.hpp
>
#
include
<
vector
>
namespace
{
//
Shared variables for generation latch test
const
int
N_THREADS
=
10
;
boost::latch
gen_latch
(
N_THREADS
);
boost::mutex mutex;
long
global_parameter;
void
latch_thread
()
{
{
boost::unique_lock<boost::mutex>
lock
(mutex);
global_parameter++;
}
gen_latch.
count_down
();
//
do something else
}
}
//
namespace
void
test_latch
()
{
boost::thread_group g;
global_parameter =
0
;
try
{
for
(
int
i =
0
; i <
N_THREADS
; ++i)
g.
create_thread
(&latch_thread);
if
(! gen_latch.
try_wait
())
if
(gen_latch.
wait_for
(
boost::chrono::milliseconds
(
100
)) == boost::cv_status::timeout)
if
(gen_latch.
wait_until
(
boost::chrono::steady_clock::now
()+
boost::chrono::milliseconds
(
100
)) == boost::cv_status::timeout)
gen_latch.
wait
();
//
All the threads have been updated the global_parameter
BOOST_TEST_EQ
(global_parameter,
N_THREADS
);
g.
join_all
();
}
catch
(...)
{
BOOST_TEST
(
false
);
g.
interrupt_all
();
g.
join_all
();
//
throw;
}
}
int
main
()
{
test_latch
();
return
boost::report_errors
();
}
Back
|
FazBrowse Home
|
New Git URL