Struct OwnedAtomicQueue<T>
A generic, multiple-reader, multiple-writer concurrent queue. The queue uses a sentinel node to track each end of the queue. When the queue is empty, the first and last nodes point to each other. Elements are added to the queue between the last and next-to-last nodes, whose pointers are updated accordingly. The element removed from the queue is always the next-to-first, and the pointers of the first and next-to-next-to-first elements are updated.
Namespace: Unity.Media.Utilities
Syntax
public struct OwnedAtomicQueue<T> : IDisposable, IValidatable, IEquatable<OwnedAtomicQueue<T>> where T : struct
Type Parameters
Name | Description |
---|---|
T | The element type |
Remarks
The difference between this and AtomicQueue<T> is that this manages the payload storage for you and AtomicQueue<T> does not.
Properties
IsEmpty
Whether the queue is empty
Declaration
public bool IsEmpty { get; }
Property Value
Type | Description |
---|---|
Boolean |
Remarks
Due to the concurrent nature of the queue, users should be careful about using this property for decision making
Valid
Whether this queue is valid
Declaration
public bool Valid { get; }
Property Value
Type | Description |
---|---|
Boolean |
Implements
Methods
AcquirePayloadStorage(out T*)
Allocates storage for a payload
Declaration
public bool AcquirePayloadStorage(out T*payload)
Parameters
Type | Name | Description |
---|---|---|
T* | payload | The allocated payload storage will be placed here |
Returns
Type | Description |
---|---|
Boolean | True if a previous storage allocation was reused, otherwise false |
Create(AllocationMode)
Create an OwnedAtomicQueue<T>
Declaration
public static OwnedAtomicQueue<T> Create(AllocationMode allocationMode = AllocationMode.Pooled)
Parameters
Type | Name | Description |
---|---|---|
AllocationMode | allocationMode | Use the specified allocation mode for the queue's internal free list |
Returns
Type | Description |
---|---|
OwnedAtomicQueue<T> |
Remarks
This is the only valid way to create an OwnedAtomicQueue<T>
Dequeue()
Remove an element from the queue
Declaration
public T Dequeue()
Returns
Type | Description |
---|---|
T | A pointer to the next element from the queue |
Dispose()
Dispose all resources belonging to the queue
Declaration
public void Dispose()
Enqueue(ref T)
Add an element to the queue
Declaration
public void Enqueue(ref T payload)
Parameters
Type | Name | Description |
---|---|---|
T | payload | The element to be added |
Equals(Object)
Whether this is the same queue as another instance
Declaration
public override bool Equals(object obj)
Parameters
Type | Name | Description |
---|---|---|
Object | obj | The other instance to compare |
Returns
Type | Description |
---|---|
Boolean |
Equals(OwnedAtomicQueue<T>)
Whether this is the same queue as another instance
Declaration
public bool Equals(OwnedAtomicQueue<T> other)
Parameters
Type | Name | Description |
---|---|---|
OwnedAtomicQueue<T> | other | The other instance to compare |
Returns
Type | Description |
---|---|
Boolean |
GetHashCode()
Return a unique hash for this queue
Declaration
public override int GetHashCode()
Returns
Type | Description |
---|---|
Int32 |
Peek()
Returns the next element from the queue without removing it
Declaration
public T Peek()
Returns
Type | Description |
---|---|
T | A pointer to the next element from the queue |
ReleasePayloadStorage(T*)
Releases storage for a payload previously allocated via AcquirePayloadStorage
Declaration
public void ReleasePayloadStorage(T*payload)
Parameters
Type | Name | Description |
---|---|---|
T* | payload | The payload to release |
TryDequeue(out T)
Try to remove an element from the queue.
Declaration
public bool TryDequeue(out T result)
Parameters
Type | Name | Description |
---|---|---|
T | result | If there's an element available, this parameter will be updated to that element. |
Returns
Type | Description |
---|---|
Boolean | Whether the dequeueing operation succeeded. |