6.12.2.16. queue¶
Data queuing and enqueuing API
6.12.2.16.1. Synopsys¶
This implementation is a libstd specific complex storage data queue management. It behave as a FIFO implementation for various objects. It can be used, for exemple, as a media for complex messages passing between threads or to hold information in memory.
The libembed queue API is the following:
#include "api/queue.h"
mbed_error_t queue_create(uint32_t capacity, queue_t **queue);
mbed_error_t queue_enqueue(queue_t *q, void *data);
mbed_error_t queue_dequeue(queue_t *q, void **data);
bool queue_is_empty(queue_t *q);
mbed_error_t queue_available_space(queue_t *q, uint32_t *space);
6.12.2.16.2. Description¶
- queue_create() create an empty queue of the given size
- queue_enqueue() add an element in the queue
- queue_dequeue() dequeue the next element, if it exists
- queue_next_element() get the next element of the queue given in argument, if it exists, without dequeuing it
- queue_is_empty() return the empty state of the queue
- queue_available_space() get the remaining free slots count of the given queue
The Queue API is thread-safe and reentrant.
The Queue API is using the libstd allocator to manipulate the storage backend. All data are stored in the task’s heap.
for function returning mbed_error_t return type, queue API may returns:
- MBED_ERROR_NONE: function completed successfully
- MBED_ERROR_NOMEM: the allocator failed to allocate the requested memory on the head
- MBED_ERROR_NOSTORAGE: the requested element is not in the queue
- MBED_ERROR_BUSY: the queue is locked by another thread