stm-2.5.1.0: Software Transactional Memory

Copyright | (c) The University of Glasgow 2012
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | non-portable (requires STM)
Safe Haskell | Trustworthy
Language | Haskell2010

Control.Concurrent.STM.TBQueue

Contents

- TBQueue

Description

`TBQueue` is a bounded version of `TQueue`. The queue has a maximum capacity set when it is created. If the queue already contains the maximum number of elements, then `writeTBQueue` blocks until an element is removed from the queue.

The implementation is based on the traditional purely-functional queue representation that uses two lists to obtain amortised O(1) enqueue and dequeue operations.

Since: stm-2.4

Synopsis

- data TBQueue a
- newTBQueue :: Natural -> STM (TBQueue a)
- newTBQueueIO :: Natural -> IO (TBQueue a)
- readTBQueue :: TBQueue a -> STM a
- tryReadTBQueue :: TBQueue a -> STM (Maybe a)
- flushTBQueue :: TBQueue a -> STM [a]
- peekTBQueue :: TBQueue a -> STM a
- tryPeekTBQueue :: TBQueue a -> STM (Maybe a)
- writeTBQueue :: TBQueue a -> a -> STM ()
- unGetTBQueue :: TBQueue a -> a -> STM ()
- lengthTBQueue :: TBQueue a -> STM Natural
- isEmptyTBQueue :: TBQueue a -> STM Bool
- isFullTBQueue :: TBQueue a -> STM Bool

# TBQueue

data TBQueue a Source #

`TBQueue` is an abstract type representing a bounded FIFO channel.

Since: stm-2.4

#### Instances

Instances details

Eq (TBQueue a) Source # |
Instance details Defined in Control.Concurrent.STM.TBQueue Methods (==) :: TBQueue a -> TBQueue a -> Bool # (/=) :: TBQueue a -> TBQueue a -> Bool #

newTBQueue Source #

Arguments

:: Natural | maximum number of elements the queue can hold
-> STM (TBQueue a) |

Builds and returns a new instance of `TBQueue`.

newTBQueueIO :: Natural -> IO (TBQueue a) Source #

`IO` version of `newTBQueue`. This is useful for creating top-level `TBQueue`s using `unsafePerformIO`, because using `atomically` inside `unsafePerformIO` isn't possible.

readTBQueue :: TBQueue a -> STM a Source #

Read the next value from the `TBQueue`.

tryReadTBQueue :: TBQueue a -> STM (Maybe a) Source #

A version of `readTBQueue` which does not retry. Instead it returns `Nothing` if no value is available.

flushTBQueue :: TBQueue a -> STM [a] Source #

Efficiently read the entire contents of a `TBQueue` into a list. This function never retries.

Since: stm-2.4.5

peekTBQueue :: TBQueue a -> STM a Source #

Get the next value from the `TBQueue` without removing it, retrying if the channel is empty.

tryPeekTBQueue :: TBQueue a -> STM (Maybe a) Source #

A version of `peekTBQueue` which does not retry. Instead it returns `Nothing` if no value is available.

writeTBQueue :: TBQueue a -> a -> STM () Source #

Write a value to a `TBQueue`; blocks if the queue is full.

unGetTBQueue :: TBQueue a -> a -> STM () Source #

Put a data item back onto a channel, where it will be the next item read. Blocks if the queue is full.

lengthTBQueue :: TBQueue a -> STM Natural Source #

Return the length of a `TBQueue`.

Since: stm-2.5.0.0

isEmptyTBQueue :: TBQueue a -> STM Bool Source #

Returns `True` if the supplied `TBQueue` is empty.

isFullTBQueue :: TBQueue a -> STM Bool Source #

Returns `True` if the supplied `TBQueue` is full.

Since: stm-2.4.3