HikoGUI
Select Version:
main (latest dev)
0.8.1 (latest)
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
theme-value
theme-tag
text
ranged-int
phrase-mask-chars
new-window-widget
msvs-bug-20230517
msvs-bug-20230503
msvs-bug-20230428
msvc-c1001-20231106
msvc-bug-20230706
msvc-bug-20221214
modules-part1
label-delegate
bug-msvs-20220928
attribute-parser
⚠️ This documents the
main
development branch of HikoGUI. It might differ from release versions.
A low latency retained GUI
Toggle main menu visibility
Main Page
Related Pages
Topics
Namespaces
Namespace List
Namespace Members
All
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
Functions
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
Variables
c
d
g
i
l
o
p
r
s
t
x
Typedefs
Enumerations
a
b
c
d
f
g
h
k
l
p
s
t
u
v
w
Concepts
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
Related Symbols
a
b
c
d
e
f
g
h
i
m
n
o
p
r
s
t
Files
File List
Globals
All
Functions
Macros
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
Concepts
Loading...
Searching...
No Matches
src
hikogui
concurrency
unfair_mutex_intf.hpp
1
// Copyright Take Vos 2020-2022.
2
// Distributed under the Boost Software License, Version 1.0.
3
// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
9
#pragma once
10
11
#include "../utility/utility.hpp"
12
#include "../macros.hpp"
13
#include <atomic>
14
#include <memory>
15
16
hi_export_module(hikogui.concurrency.unfair_mutex : intf);
17
18
hi_export
namespace
hi
{
inline
namespace
v1
{
19
37
template
<
bool
UseDeadLockDetector>
38
class
unfair_mutex_impl
{
39
public
:
40
constexpr
unfair_mutex_impl
()
noexcept
{}
41
unfair_mutex_impl
(
unfair_mutex_impl
const
&) =
delete
;
42
unfair_mutex_impl
(
unfair_mutex_impl
&&) =
delete
;
43
unfair_mutex_impl
& operator=(
unfair_mutex_impl
const
&) =
delete
;
44
unfair_mutex_impl
& operator=(
unfair_mutex_impl
&&) =
delete
;
45
46
~unfair_mutex_impl
();
47
48
bool
is_locked()
const
noexcept
;
49
50
void
lock()
noexcept
;
51
59
[[nodiscard]]
bool
try_lock
()
noexcept
;
60
61
void
unlock()
noexcept
;
62
63
private
:
64
/*
65
* semaphore value:
66
* 0 - Unlocked, no other thread is waiting.
67
* 1 - Locked, no other thread is waiting.
68
* 2 - Locked, zero or more threads are waiting.
69
*/
70
std::atomic_unsigned_lock_free semaphore = 0;
71
using
semaphore_value_type =
typename
decltype
(semaphore)::value_type;
72
73
bool
holds_invariant()
const
noexcept
;
74
75
void
lock_contended(semaphore_value_type expected)
noexcept
;
76
};
38
class
unfair_mutex_impl
{
…
};
77
78
#ifndef NDEBUG
79
using
unfair_mutex
=
unfair_mutex_impl<true>
;
80
#else
81
using
unfair_mutex
=
unfair_mutex_impl<false>
;
82
#endif
83
84
}}
// namespace hi::v1
hi
The HikoGUI namespace.
Definition
array_generic.hpp:20
v1
DOXYGEN BUG.
Definition
algorithm_misc.hpp:20
hi::unfair_mutex_impl
An unfair mutex This is a fast implementation of a mutex which does not fairly arbitrate between mult...
Definition
unfair_mutex_intf.hpp:38
hi::v1::unfair_mutex_impl::try_lock
bool try_lock() noexcept
When try_lock() is called from a thread that already owns the lock it will return false.
Definition
unfair_mutex_impl.hpp:216
Generated on Mon Apr 22 2024 12:51:34 for HikoGUI by
1.10.0