Search Toolkit Book for CSyncQueue
Thread-safe queue object with a blocking mechanism. More...
#include <util/sync_queue.hpp>
Thread-safe queue object with a blocking mechanism.
An attempt to pop from empty queue or push to full queue function call waits for normal operation finishing. Queue can also be locked for a long time for some bulk operations. This can be achieved by CSyncQueue::T*AccessGuard classes.
CSyncQueue can be used in single threaded applications or multithreaded applications with C++ Toolkit threads as well as with any kind of native threads. In case of multithreaded applications a CSyncQueue object could be used only from one thread or from many threads. To distinguish how the object is accessed the template supports the 'Traits' parameter. The traits in particular report if the the queue is accessed from many threads (see the CSyncQueue_DefaultTraits::IsUsedConcurrently() description for the details of what could happen if the IsUsedConcurrently() is not implemented properly). The default traits suppose that the C++ Toolkit CThread class is used to create threads.
There is a difference as well of how the timeouts are handled depending on what threads are used in the application if so: the C++ Toolkit threads or some other threads. The only difference between these cases is passing NULL as timeout in methods Push(), Pop() and Clear(). When C++ Toolkit CThread class is used to create application's threads then NULL value will mean indefinite timeout (as stated in comments to those methods). But if all threads in the application (if any) were created by some native function without using CThread class then NULL value will mean 0 timeout and it's impossible to set indefinite timeout in this case.
Full description and examples of using look here: Using CSyncQueue class.
Definition at line 216 of file sync_queue.hpp.
◆ TAccessGuardtemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Type of access guardian for non-constant queue.
Definition at line 331 of file sync_queue.hpp.
◆ TAutoLocktemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Short name of auto-lock for this queue type.
For internal use only.
Definition at line 353 of file sync_queue.hpp.
◆ TCheckFunctemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ TConstAccessGuardtemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Type of access guardian for constant queue.
Definition at line 329 of file sync_queue.hpp.
◆ TConstIteratortemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ TErrorThrowertemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
typedef void(* CSyncQueue< Type, Container, Traits >::TErrorThrower) (void) private ◆ TIteratortemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ TNativeConstItertemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ TNativeItertemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ TSizetemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ TThisTypetemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ TValuetemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ anonymous enumtemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Enumerator kThreadSystemID_NoneValue of thread system id that cannot be equal to any thread's id.
Definition at line 504 of file sync_queue.hpp.
◆ CSyncQueue() [1/2]template<class Type , class Container , class Traits >
Construct queue.
Definition at line 1228 of file sync_queue.hpp.
References NCBI_THROW.
◆ CSyncQueue() [2/2]template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ Clear()template<class Type , class Container , class Traits >
◆ CopyTo()template<class Type , class Container , class Traits >
Copy (add) all queue elements to another queue.
Definition at line 1613 of file sync_queue.hpp.
References copy(), CSyncQueue_InternalAutoLock< Type, Container, Traits >::Lock(), CSyncQueue< Type, Container, Traits >::m_MaxSize, CSyncQueue< Type, Container, Traits >::m_Size, CSyncQueue< Type, Container, Traits >::m_Store, NCBI_THROW, ThrowSyncQueueTimeout(), and CSyncQueue< Type, Container, Traits >::x_IsGuarded().
◆ GetMaxSize()template<class Type , class Container , class Traits >
Get the maximum # of elements allowed to be kept in the queue.
Definition at line 1264 of file sync_queue.hpp.
◆ GetSize()template<class Type , class Container , class Traits >
◆ IsEmpty()template<class Type , class Container , class Traits >
◆ IsFull()template<class Type , class Container , class Traits >
Check if the queue is full (has maxSize elements)
Definition at line 1280 of file sync_queue.hpp.
◆ operator=()template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ Pop() [1/2]template<class Type , class Container , class Traits >
Retrieve an element from the queue.
Definition at line 1573 of file sync_queue.hpp.
◆ Pop() [2/2]template<class Type , class Container , class Traits >
◆ Push() [1/2]template<class Type , class Container , class Traits >
Add new element to the end of queue.
Definition at line 1547 of file sync_queue.hpp.
◆ Push() [2/2]template<class Type , class Container , class Traits >
Add new element to the end of queue.
Definition at line 1563 of file sync_queue.hpp.
Referenced by CPrefetchThreadOld::AddRequest(), CThreadPool_Impl::AddTask(), CAppTaskService::AddTask(), CMergeTreeThread::Main(), CThreadPool_Impl::RequestExclusiveExecution(), CMergeyApp::Run(), CSQLITE3_Cache::CWriterThread::Stop(), CSQLITE3_Cache::Store(), CPrefetchThreadOld::Terminate(), and CAppTaskService::x_OnWakeUpSignal().
◆ x_Begin() [1/2]template<class Type , class Container , class Traits >
◆ x_Begin() [2/2]template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Get constant iterator pointing to the start of underlying container.
◆ x_Clear_NonBlocking()template<class Type , class Container , class Traits >
void CSyncQueue< Type, Container, Traits >::x_Clear_NonBlocking ( void ) inlineprivateClear the queue – without locking and blocking.
Definition at line 1538 of file sync_queue.hpp.
◆ x_DoubleLock()template<class Type , class Container , class Traits >
◆ x_End() [1/2]template<class Type , class Container , class Traits >
◆ x_End() [2/2]template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Get constant iterator pointing to the end of underlying container.
◆ x_Erase() [1/2]template<class Type , class Container , class Traits >
Erase several elements from the underlying container.
Definition at line 1699 of file sync_queue.hpp.
References delta(), and NCBI_THROW.
◆ x_Erase() [2/2]template<class Type , class Container , class Traits >
Erase one element from the underlying container.
Definition at line 1688 of file sync_queue.hpp.
◆ x_GuardedLock()template<class Type , class Container , class Traits >
◆ x_GuardedUnlock()template<class Type , class Container , class Traits >
void CSyncQueue< Type, Container, Traits >::x_GuardedUnlock ( void ) const inlineprivate ◆ x_IsGuarded()template<class Type , class Container , class Traits >
◆ x_Lock()template<class Type , class Container , class Traits >
◆ x_LockAndWait()template<class Type , class Container , class Traits >
Lock the queue and wait until the condition function returns FALSE.
Definition at line 1343 of file sync_queue.hpp.
References CAtomicCounter::Add(), CStopWatch::Elapsed(), ePositive, CStopWatch::eStart, CTimeSpan::GetSign(), CSyncQueue_InternalAutoLock< Type, Container, Traits >::Lock(), CSemaphore::TryWait(), CSyncQueue_InternalAutoLock< Type, Container, Traits >::Unlock(), and CSemaphore::Wait().
◆ x_LockAndWaitWhileEmpty()template<class Type , class Container , class Traits >
Lock the queue and wait until it has at least one element.
Definition at line 1445 of file sync_queue.hpp.
References ThrowSyncQueueEmpty().
◆ x_LockAndWaitWhileFull()template<class Type , class Container , class Traits >
Lock the queue and wait until it has room for more elements.
Definition at line 1432 of file sync_queue.hpp.
References ThrowSyncQueueNoRoom().
◆ x_Pop_NonBlocking()template<class Type , class Container , class Traits >
◆ x_Push_NonBlocking()template<class Type , class Container , class Traits >
◆ x_Unlock()template<class Type , class Container , class Traits >
◆ CSyncQueue_AccessGuard< Type, Container, Traits >template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Definition at line 540 of file sync_queue.hpp.
◆ CSyncQueue_ConstAccessGuard< Type, Container, Traits >template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Definition at line 540 of file sync_queue.hpp.
◆ CSyncQueue_I< Type, Container, TNativeConstIter, Traits >template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Definition at line 540 of file sync_queue.hpp.
◆ CSyncQueue_I< Type, Container, TNativeIter, Traits >template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Definition at line 540 of file sync_queue.hpp.
◆ CSyncQueue_InternalAutoLock< Type, Container, Traits >template<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Definition at line 540 of file sync_queue.hpp.
◆ m_CntWaitNotEmptytemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Number of threads waiting for the queue to become non-empty.
Definition at line 528 of file sync_queue.hpp.
◆ m_CntWaitNotFulltemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Number of threads waiting for the queue to become non-full.
Definition at line 534 of file sync_queue.hpp.
◆ m_CurGuardTIDtemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
ID of the thread in which the queue has been locked by a guardian.
Definition at line 537 of file sync_queue.hpp.
◆ m_LockCounttemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Number of lockings of this queue with access guardians in one thread.
Definition at line 540 of file sync_queue.hpp.
◆ m_MaxSizetemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ m_Sizetemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ m_Storetemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
◆ m_TrigLocktemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Semaphore to signal that the queue can be safely modified.
Definition at line 522 of file sync_queue.hpp.
◆ m_TrigNotEmptytemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Semaphore to signal that the queue has become not empty.
Definition at line 525 of file sync_queue.hpp.
◆ m_TrigNotFulltemplate<class Type , class Container = deque<Type>, class Traits = CSyncQueue_DefaultTraits>
Semaphore to signal that the queue has become not full.
Definition at line 531 of file sync_queue.hpp.
The documentation for this class was generated from the following file:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4