---
name: "ck_queue"
section: "3"
platform: "linux"
package: "libck-dev"
version: "0.7.2-6"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ck_queue"
---

# ck\_queue(3)

multi-reader single-writer singly-linked lists, singly-linked tail queues and lists

## NAME

**CK\_LIST\_EMPTY**, **CK\_LIST\_ENTRY**, **CK\_LIST\_FIRST**, **CK\_LIST\_FOREACH**, **CK\_LIST\_FOREACH\_FROM**, **CK\_LIST\_FOREACH\_SAFE**, **CK\_LIST\_HEAD**, **CK\_LIST\_HEAD\_INITIALIZER**, **CK\_LIST\_INIT**, **CK\_LIST\_INSERT\_AFTER**, **CK\_LIST\_INSERT\_BEFORE**, **CK\_LIST\_INSERT\_HEAD**, **CK\_LIST\_MOVE**, **CK\_LIST\_NEXT**, **CK\_LIST\_REMOVE**, **CK\_LIST\_SWAP**, **CK\_SLIST\_EMPTY**, **CK\_SLIST\_ENTRY**, **CK\_SLIST\_FIRST**, **CK\_SLIST\_FOREACH**, **CK\_SLIST\_FOREACH\_FROM**, **CK\_SLIST\_FOREACH\_PREVPTR**, **CK\_SLIST\_FOREACH\_SAFE**, **CK\_SLIST\_HEAD**, **CK\_SLIST\_HEAD\_INITIALIZER**, **CK\_SLIST\_INIT**, **CK\_SLIST\_INSERT\_AFTER**, **CK\_SLIST\_INSERT\_HEAD**, **CK\_SLIST\_MOVE**, **CK\_SLIST\_NEXT**, **CK\_SLIST\_REMOVE**, **CK\_SLIST\_REMOVE\_AFTER**, **CK\_SLIST\_REMOVE\_HEAD**, **CK\_SLIST\_SWAP**, **CK\_STAILQ\_CONCAT**, **CK\_STAILQ\_EMPTY**, **CK\_STAILQ\_ENTRY**, **CK\_STAILQ\_FIRST**, **CK\_STAILQ\_FOREACH**, **CK\_STAILQ\_FOREACH\_FROM**, **CK\_STAILQ\_FOREACH\_SAFE**, **CK\_STAILQ\_HEAD**, **CK\_STAILQ\_HEAD\_INITIALIZER**, **CK\_STAILQ\_INIT**, **CK\_STAILQ\_INSERT\_AFTER**, **CK\_STAILQ\_INSERT\_HEAD**, **CK\_STAILQ\_INSERT\_TAIL**, **CK\_STAILQ\_MOVE**, **CK\_STAILQ\_NEXT**, **CK\_STAILQ\_REMOVE**, **CK\_STAILQ\_REMOVE\_AFTER**, **CK\_STAILQ\_REMOVE\_HEAD**, **CK\_STAILQ\_SWAP** – multi-reader single-writer singly-linked lists, singly-linked tail queues and lists

## LIBRARY

Concurrency Kit (libck, -lck)

## SYNOPSIS

**#include \<ck\_queue.h\>**

**CK\_LIST\_EMPTY**();

**CK\_LIST\_ENTRY**();

**CK\_LIST\_FIRST**();

**CK\_LIST\_FOREACH**();

**CK\_LIST\_FOREACH\_FROM**();

**CK\_LIST\_FOREACH\_SAFE**();

**CK\_LIST\_HEAD**();

**CK\_LIST\_HEAD\_INITIALIZER**();

**CK\_LIST\_INIT**();

**CK\_LIST\_INSERT\_AFTER**();

**CK\_LIST\_INSERT\_BEFORE**();

**CK\_LIST\_INSERT\_HEAD**();

**CK\_LIST\_MOVE**();

**CK\_LIST\_NEXT**();

**CK\_LIST\_REMOVE**();

**CK\_LIST\_SWAP**();

**CK\_SLIST\_EMPTY**();

**CK\_SLIST\_ENTRY**();

**CK\_SLIST\_FIRST**();

**CK\_SLIST\_FOREACH**();

**CK\_SLIST\_FOREACH\_FROM**();

**CK\_SLIST\_FOREACH\_PREVPTR**();

**CK\_SLIST\_FOREACH\_SAFE**();

**CK\_SLIST\_HEAD**();

**CK\_SLIST\_HEAD\_INITIALIZER**();

**CK\_SLIST\_INIT**();

**CK\_SLIST\_INSERT\_AFTER**();

**CK\_SLIST\_INSERT\_HEAD**();

**CK\_SLIST\_MOVE**();

**CK\_SLIST\_NEXT**();

**CK\_SLIST\_REMOVE**();

**CK\_SLIST\_REMOVE\_AFTER**();

**CK\_SLIST\_REMOVE\_HEAD**();

**CK\_SLIST\_SWAP**();

**CK\_STAILQ\_CONCAT**();

**CK\_STAILQ\_EMPTY**();

**CK\_STAILQ\_ENTRY**();

**CK\_STAILQ\_FIRST**();

**CK\_STAILQ\_FOREACH**();

**CK\_STAILQ\_FOREACH\_FROM**();

**CK\_STAILQ\_FOREACH\_SAFE**();

**CK\_STAILQ\_HEAD**();

**CK\_STAILQ\_HEAD\_INITIALIZER**();

**CK\_STAILQ\_INIT**();

**CK\_STAILQ\_INSERT\_AFTER**();

**CK\_STAILQ\_INSERT\_HEAD**();

**CK\_STAILQ\_INSERT\_TAIL**();

**CK\_STAILQ\_MOVE**();

**CK\_STAILQ\_NEXT**();

**CK\_STAILQ\_REMOVE**();

**CK\_STAILQ\_REMOVE\_AFTER**();

**CK\_STAILQ\_REMOVE\_HEAD**();

**CK\_STAILQ\_SWAP**();

## DESCRIPTION

See your system's manual page for queue for additional information. ck\_queue is a queue.h-compatible implementation of many-reader-single-writer queues. It allows for safe concurrent iteration, peeking and read-side access in the presence of a single concurrent writer without any usage of locks. In many cases, adoption of ck\_queue will simply require prefixing all queue operations with CK\_.

## SEE ALSO

queue

Additional information available at http://concurrencykit.org/
