tail head cat sleep
QR code linking to this page

Manual Pages  — MEMBARRIER

NAME

membarrier – memory barrier

CONTENTS

LIBRARY

Standard C Library (libc, -lc)

SYNOPSIS

#include <sys/membarrier.h>

int
membarrier(int cmd, unsigned flags, int cpu_id);

DESCRIPTION

The membarrier system call provides a memory barrier, ensuring ordering between memory accesses performed by different threads or processes within the same address space.

The following values for cmd may be specified:
MEMBARRIER_CMD_QUERY
  Query supported commands. A bitmask of commands supported by the kernel is returned.
MEMBARRIER_CMD_GLOBAL
  Issue a memory barrier for all threads from all processes.
MEMBARRIER_CMD_SHARED
  This is an alias for MEMBARRIER_CMD_GLOBAL.
MEMBARRIER_CMD_GLOBAL_EXPEDITED
  Execute a memory barrier on all running threads of all processes registered with MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED.
MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED
  Register the process to receive MEMBARRIER_CMD_GLOBAL_EXPEDITED memory barriers.
MEMBARRIER_CMD_PRIVATE_EXPEDITED
  Execute a memory barrier on each running thread belonging to the same process as the thread calling membarrier.
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED
  Register the process to receive MEMBARRIER_CMD_PRIVATE_EXPEDITED memory barriers.
MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE
  In addition to the guarantees provided by MEMBARRIER_CMD_PRIVATE_EXPEDITED it also executes machine-specific serialization instructions, which ensures that all possible speculative and out-of-order activities on the target CPU are fenced.
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE
  Register the process to receive MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE memory barriers.

The following cmd values are defined for source compatibility but are not yet supported:

MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ
 

The flags argument must be 0. The cpu_id argument is ignored.

RETURN VALUES

If the cmd is MEMBARRIER_CMD_QUERY a bitmask of supported commands is returned. Otherwise, on success, membarrier returns 0. On error, -1 is returned and errno is set to indicate the error.

ERRORS

membarrier may fail with the following errors:
[EINVAL]
  cmd does not specify a valid command.
[EINVAL]
  flags is not 0.
[EPERM]
  An attempt was made to use MEMBARRIER_CMD_GLOBAL_EXPEDITED, MEMBARRIER_CMD_PRIVATE_EXPEDITED, or MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE by a process that did not previously register use with the corresponding MEMBARRIER_CMD_REGISTER_* cmd.

STANDARDS

The membarrier system call originated in Linux. This implementation aims to be source-compatible with the Linux implementation. Certain cmd and flags values are currently not supported by FreeBSD .

HISTORY

The membarrier function was introduced in FreeBSD 14.1 .

MEMBARRIER (2) October 6, 2024

tail head cat sleep
QR code linking to this page


Please direct any comments about this manual page service to Ben Bullock. Privacy policy.

“ Some people open all the windows; wise wives welcome spring by moving the UNIX. ”