Documentation ¶
Overview ¶
A producer/consumer queue is a concurrent bounded buffer supporting multiple concurrent producers and consumers, with timeouts. The queue can be closed from either end, by the producer and/or the consumer. When closed, the contents are discarded, and subsequent operations return an error.
Note: the main reason to use a producer/consumer queue instead of a channel is to allow the consumer to close the channel. This queue can be used for many-to-many communication with multiple producers and/or multiple consumers. Any of the producers and any of the consumers are allowed to close the queue.
Index ¶
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type T ¶
type T struct {
// contains filtered or unexported fields
}
T is a producer/consumer queue. It fulfills the same purpose as a Go channel, the main advantage is that the Put() operation does not panic, even after the queue is closed. The main disadvantage is that the T can't be used in a select operation.
func (*T) Close ¶
func (q *T) Close()
Close() closes the queue, without discarding the contents. All Put*() operations currently running may, or may not, add their values to the queue. All Put*() operations that happen-after the Close() will fail.
func (*T) Get ¶
Get(cancel) returns the next item from the queue, or an error if the queue is closed or the operation is cancelled.
func (*T) Put ¶
Put(item, cancel) adds an item to the queue, or returns an error if the queue is closed or the operation is cancelled. The <cancel> channel may be nil, in which case the operation can't be cancelled.