OpenNN
Open-source neural networks library
Loading...
Searching...
No Matches
thread_safe_queue.h
Go to the documentation of this file.
1// OpenNN: Open Neural Networks Library
2// www.opennn.net
3//
4// T H R E A D S A F E Q U E U E
5//
6// Artificial Intelligence Techniques SL
7// artelnics@artelnics.com
8
9#pragma once
10
11// Bounded-blocking-style concurrent queue used by the optimizer family
12// (background batch prefetch, async data loaders). Standard mutex + condvar
13// pattern; nothing tensor-specific.
14
15#include <queue>
16#include <mutex>
17#include <condition_variable>
18
19namespace opennn
20{
21
22template <typename T>
24{
25public:
26
27 void push(T item)
28 {
29 { lock_guard<mutex> lock(mutex_); queue_.push(move(item)); }
30 cond_.notify_one();
31 }
32
33 T pop()
34 {
35 unique_lock<mutex> lock(mutex_);
36 cond_.wait(lock, [this] { return !queue_.empty(); });
37 T item = move(queue_.front());
38 queue_.pop();
39 return item;
40 }
41
42 bool empty() const
43 {
44 lock_guard<mutex> lock(mutex_);
45 return queue_.empty();
46 }
47
48private:
49
50 queue<T> queue_;
51 mutable mutex mutex_;
52 condition_variable cond_;
53};
54
55}
56
57// OpenNN: Open Neural Networks Library.
58// Copyright(C) 2005-2026 Artificial Intelligence Techniques, SL.
59// Licensed under the GNU Lesser General Public License v2.1 or later.
Definition thread_safe_queue.h:24
bool empty() const
Definition thread_safe_queue.h:42
T pop()
Definition thread_safe_queue.h:33
void push(T item)
Definition thread_safe_queue.h:27
Definition adaptive_moment_estimation.h:19