uatomic/x86: Remove redundant memory barriers
[urcu.git] / doc / examples / wfcqueue / cds_wfcq_dequeue.c
CommitLineData
1c87adb3
MJ
1// SPDX-FileCopyrightText: 2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
2//
3// SPDX-License-Identifier: MIT
4
c83da169 5/*
c83da169
MD
6 * This example shows how to dequeue nodes from a wfcqueue.
7 */
8
9#include <stdio.h>
10#include <stdlib.h>
11
12#include <urcu/wfcqueue.h> /* Wait-free concurrent queue */
13#include <urcu/compiler.h> /* For CAA_ARRAY_SIZE */
14
15/*
16 * Nodes populated into the queue.
17 */
18struct mynode {
19 int value; /* Node content */
20 struct cds_wfcq_node node; /* Chaining in queue */
21};
22
70469b43 23int main(void)
c83da169
MD
24{
25 int values[] = { -5, 42, 36, 24, };
26 struct cds_wfcq_head myqueue_head; /* Queue head */
27 struct cds_wfcq_tail myqueue_tail; /* Queue tail */
28 unsigned int i;
29 int ret = 0;
30
31 cds_wfcq_init(&myqueue_head, &myqueue_tail);
32
33 /*
8f09dfa7 34 * Enqueue nodes.
c83da169
MD
35 */
36 for (i = 0; i < CAA_ARRAY_SIZE(values); i++) {
37 struct mynode *node;
38
39 node = malloc(sizeof(*node));
40 if (!node) {
41 ret = -1;
42 goto end;
43 }
44
45 cds_wfcq_node_init(&node->node);
46 node->value = values[i];
47 cds_wfcq_enqueue(&myqueue_head, &myqueue_tail,
48 &node->node);
49 }
50
51 /*
52 * Dequeue each node from the queue. Those will be dequeued from
53 * the oldest (first enqueued) to the newest (last enqueued).
54 */
55 printf("dequeued content:");
56 for (;;) {
57 struct cds_wfcq_node *qnode;
58 struct mynode *node;
59
60 qnode = cds_wfcq_dequeue_blocking(&myqueue_head, &myqueue_tail);
61 if (!qnode) {
62 break; /* Queue is empty. */
63 }
64 /* Getting the container structure from the node */
65 node = caa_container_of(qnode, struct mynode, node);
66 printf(" %d", node->value);
67 free(node);
68 }
69 printf("\n");
70end:
6acc6ad4 71 cds_wfcq_destroy(&myqueue_head, &myqueue_tail);
c83da169
MD
72 return ret;
73}
This page took 0.040687 seconds and 5 git commands to generate.