stm-2.4.4: 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
LanguageHaskell98

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: 2.4

Synopsis

TQueue

data TQueue a Source

TQueue is an abstract type representing an unbounded FIFO channel.

Since: 2.4

Instances

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.

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.