]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/performance/29_atomics/atomic_flag.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / performance / 29_atomics / atomic_flag.cc
CommitLineData
99dee823 1// Copyright (C) 2009-2021 Free Software Foundation, Inc.
3cee0c65
JW
2//
3// This file is part of the GNU ISO C++ Library. This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3. If not see
16// <http://www.gnu.org/licenses/>.
17
18
19#include <atomic>
20#include <testsuite_performance.h>
21
22volatile std::atomic_flag af;
23volatile std::atomic_uchar ac;
24volatile std::atomic_int ai;
25
26int main()
27{
28 using namespace __gnu_test;
29 time_counter time;
30 resource_counter resource;
31
32 const int n = 100000000;
33
34 start_counters(time, resource);
35 for (int i = 0; i < n; ++i)
36 af.test_and_set();
37 stop_counters(time, resource);
38 report_performance(__FILE__, "atomic_flag::test_and_set()", time, resource);
39
40 start_counters(time, resource);
41 for (int i = 0; i < n; ++i)
42 af.clear();
43 stop_counters(time, resource);
44 report_performance(__FILE__, "atomic_flag::clear()", time, resource);
45
46 start_counters(time, resource);
47 for (int i = 0; i < n; ++i)
48 ac |= 1;
49 stop_counters(time, resource);
50 report_performance(__FILE__, "atomic_uchar::operator|=(1)", time, resource);
51
52 start_counters(time, resource);
53 for (int i = 0; i < n; ++i)
54 ac = 0;
55 stop_counters(time, resource);
56 report_performance(__FILE__, "atomic_flag::operator=(0)", time, resource);
57
58 start_counters(time, resource);
59 for (int i = 0; i < n; ++i)
60 ai |= 1;
61 stop_counters(time, resource);
62 report_performance(__FILE__, "atomic_int::operator|=(1)", time, resource);
63
64 start_counters(time, resource);
65 for (int i = 0; i < n; ++i)
66 ai = 0;
67 stop_counters(time, resource);
68 report_performance(__FILE__, "atomic_int::operator=(0)", time, resource);
69
70 return 0;
71}