stm-2.5.0.2: Software Transactional Memory
Copyright(c) The University of Glasgow 2012
LicenseBSD-style (see the file libraries/base/LICENSE)
Maintainerlibraries@haskell.org
Stabilityexperimental
Portabilitynon-portable (requires STM)
Safe HaskellTrustworthy
LanguageHaskell2010

Control.Concurrent.STM.TQueue

Contents

Description

A TQueue is like a TChan, with two important differences:

  • it has faster throughput than both TChan and Chan (although the costs are amortised, so the cost of individual operations can vary a lot).
  • it does not provide equivalents of the dupTChan and cloneTChan operations.

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

TQueue

data TQueue a Source #

TQueue is an abstract type representing an unbounded FIFO channel.

Since: stm-2.4

Instances

Instances details
Eq (TQueue a) Source # 
Instance details

Defined in Control.Concurrent.STM.TQueue

Methods

(==) :: TQueue a -> TQueue a -> Bool #

(/=) :: TQueue a -> TQueue a -> Bool #

newTQueue :: STM (TQueue a) Source #

Build and returns a new instance of TQueue

newTQueueIO :: IO (TQueue a) Source #

IO version of newTQueue. This is useful for creating top-level TQueues using unsafePerformIO, because using atomically inside unsafePerformIO isn't possible.

readTQueue :: TQueue a -> STM a Source #

Read the next value from the TQueue.

tryReadTQueue :: TQueue a -> STM (Maybe a) Source #

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

flushTQueue :: TQueue a -> STM [a] Source #

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

Since: stm-2.4.5

peekTQueue :: TQueue a -> STM a Source #

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

tryPeekTQueue :: TQueue a -> STM (Maybe a) Source #

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

writeTQueue :: TQueue a -> a -> STM () Source #

Write a value to a TQueue.

unGetTQueue :: TQueue a -> a -> STM () Source #

Put a data item back onto a channel, where it will be the next item read.

isEmptyTQueue :: TQueue a -> STM Bool Source #

Returns True if the supplied TQueue is empty.