IceShard
1
A personal game engine project, with development focused on 2D/2.5D games.
Toggle main menu visibility
Loading...
Searching...
No Matches
tasks
public
ice
task_transaction.hxx
Go to the documentation of this file.
1
3
4
#pragma once
5
#include <
ice/task_awaitable.hxx
>
6
#include <
ice/atomic_linked_queue.hxx
>
7
8
namespace
ice
9
{
10
11
struct
TaskTransaction
12
{
13
ice::AtomicLinkedQueue<ice::TaskAwaitableBase>
queue
;
14
std::atomic<ice::u32>
awaiters
;
15
};
16
17
struct
TaskTransactionTracker
18
{
19
std::atomic<ice::TaskTransaction*>
current_transaction
=
nullptr
;
20
21
inline
auto
start_transaction
(
ice::TaskTransaction
& transaction)
noexcept
->
ice::TaskTransaction
&
22
{
23
ice::TaskTransaction
* ongoing_transaction =
nullptr
;
24
if
(
current_transaction
.compare_exchange_strong(ongoing_transaction, &transaction, std::memory_order_relaxed))
25
{
26
return
transaction;
27
}
28
return
*ongoing_transaction;
29
}
30
31
inline
void
finish_transaction
(
ice::TaskTransaction
& transaction)
noexcept
32
{
33
if
(
current_transaction
.load(std::memory_order_relaxed) == ice::addressof(transaction))
34
{
35
current_transaction
.store(
nullptr
, std::memory_order_relaxed);
36
}
37
}
38
};
39
40
}
// namespace ice
atomic_linked_queue.hxx
ice
SPDX-License-Identifier: MIT.
Definition
array.hxx:12
ice::AtomicLinkedQueue
Definition
atomic_linked_queue.hxx:16
ice::TaskTransaction
Definition
task_transaction.hxx:12
ice::TaskTransaction::awaiters
std::atomic< ice::u32 > awaiters
Definition
task_transaction.hxx:14
ice::TaskTransaction::queue
ice::AtomicLinkedQueue< ice::TaskAwaitableBase > queue
Definition
task_transaction.hxx:13
ice::TaskTransactionTracker
Definition
task_transaction.hxx:18
ice::TaskTransactionTracker::start_transaction
auto start_transaction(ice::TaskTransaction &transaction) noexcept -> ice::TaskTransaction &
Definition
task_transaction.hxx:21
ice::TaskTransactionTracker::current_transaction
std::atomic< ice::TaskTransaction * > current_transaction
Definition
task_transaction.hxx:19
ice::TaskTransactionTracker::finish_transaction
void finish_transaction(ice::TaskTransaction &transaction) noexcept
Definition
task_transaction.hxx:31
task_awaitable.hxx
Generated by
1.18.0