---
name: "atomic"
section: "3"
platform: "macos"
package: "libplatform"
version: "375.120.2"
release: "macOS 26.5"
platforms: ["macos"]
url: "https://new.carta.tech/atomic"
---

# atomic(3)

atomic lockless queues

## NAME

**OSAtomicEnqueue**, **OSAtomicDequeue** – atomic lockless queues

## SYNOPSIS

**#include \<libkern/OSAtomic.h\>**

*void*\

**OSAtomicEnqueue**(*OSQueueHead \*list*, *void \*new*, *size\_t offset*);

*void\**\

**OSAtomicDequeue**(*OSQueueHead \*list*, *size\_t offset*);

## DESCRIPTION

The routines **OSAtomicEnqueue**() and **OSAtomicDequeue**() operate on singly linked LIFO queues.  Ie, a dequeue operation will return the most recently enqueued element, or NULL if the list is empty.  The operations are lockless, and barriers are used as necessary to permit thread-safe access to the queue element. *offset* is the offset in bytes to the link field in the queue element.

Important: the memory backing the link field of a queue element must not be unmapped after **OSAtomicDequeue**() returns until all concurrent calls to **OSAtomicDequeue**() for the same list on other threads have also returned, as they may still be accessing that memory location.

## EXAMPLES

```
	typedef struct elem {
		long	data1;
		struct elem *link;
		int	data2;
	} elem_t;
	elem_t fred, mary, *p;
	OSQueueHead q = OS_ATOMIC_QUEUE_INIT;
	OSAtomicEnqueue( &q, &fred, offsetof(elem_t,link) );
	OSAtomicEnqueue( &q, &mary, offsetof(elem_t,link) );
	p = OSAtomicDequeue( &q, offsetof(elem_t,link) );
```

In this example, the call of **OSAtomicDequeue**() will return a ptr to mary.

## RETURN VALUES

The dequeue operation returns the most recently enqueued element, or NULL if the list in empty.

## SEE ALSO

[stdatomic(3)](/stdatomic/3.md), [atomic\_deprecated(3)](/atomic_deprecated/3.md), [spinlock\_deprecated(3)](/spinlock_deprecated/3.md)

## HISTORY

These functions first appeared in Mac OS 10.5 (Leopard).
