# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-06-01 05:51+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "futex" msgstr "" #. type: TH #: archlinux debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "" #. type: TH #: archlinux debian-unstable #, no-wrap msgid "Linux man-pages 6.8" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "futex - fast user-space locking" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "LIBRARY" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Standard C library (I, I<-lc>)" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "B<#include Elinux/futex.hE> /* Definition of B constants */\n" "B<#include Esys/syscall.hE> /* Definition of B constants */\n" "B<#include Eunistd.hE>\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "BIB<, int >IB<, uint32_t >IB<,>\n" "B< const struct timespec *>IB<,>I< > /* or: BIB< */>\n" "B< uint32_t *>IB<, uint32_t >IB<);>\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I: glibc provides no wrapper for B(), necessitating the use of " "B(2)." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B() system call provides a method for waiting until a certain " "condition becomes true. It is typically used as a blocking construct in the " "context of shared-memory synchronization. When using futexes, the majority " "of the synchronization operations are performed in user space. A user-space " "program employs the B() system call only when it is likely that the " "program has to block for a longer time until the condition becomes true. " "Other B() operations can be used to wake any processes or threads " "waiting for a particular condition." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A futex is a 32-bit value\\[em]referred to below as a I\\[em]whose address is supplied to the B() system call. " "(Futexes are 32 bits in size on all platforms, including 64-bit systems.) " "All futex operations are governed by this value. In order to share a futex " "between processes, the futex is placed in a region of shared memory, created " "using (for example) B(2) or B(2). (Thus, the futex word may " "have different virtual addresses in different processes, but these addresses " "all refer to the same location in physical memory.) In a multithreaded " "program, it is sufficient to place the futex word in a global variable " "shared by all threads." msgstr "" # #. Notes from Darren Hart (Dec 2015): #. Totally ordered with respect futex operations refers to semantics #. of the ACQUIRE/RELEASE operations and how they impact ordering of #. memory reads and writes. The kernel futex operations are protected #. by spinlocks, which ensure that all operations are serialized #. with respect to one another. #. This is a lot to attempt to define in this document. Perhaps a #. reference to linux/Documentation/memory-barriers.txt as a footnote #. would be sufficient? Or perhaps for this manual, "serialized" would #. be sufficient, with a footnote regarding "totally ordered" and a #. pointer to the memory-barrier documentation? #. FIXME(Torvald Riegel): #. Eventually we want to have some text in NOTES to satisfy #. the reference in the following sentence #. See NOTES for a detailed specification of #. the synchronization semantics. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When executing a futex operation that requests to block a thread, the kernel " "will block only if the futex word has the value that the calling thread " "supplied (as one of the arguments of the B() call) as the expected " "value of the futex word. The loading of the futex word's value, the " "comparison of that value with the expected value, and the actual blocking " "will happen atomically and will be totally ordered with respect to " "concurrent operations performed by other threads on the same futex word. " "Thus, the futex word is used to connect the synchronization in user space " "with the implementation of blocking by the kernel. Analogously to an atomic " "compare-and-exchange operation that potentially changes shared memory, " "blocking via a futex is an atomic compare-and-block operation." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "One use of futexes is for implementing locks. The state of the lock (i.e., " "acquired or not acquired) can be represented as an atomically accessed flag " "in shared memory. In the uncontended case, a thread can access or modify " "the lock state with atomic instructions, for example atomically changing it " "from not acquired to acquired using an atomic compare-and-exchange " "instruction. (Such instructions are performed entirely in user mode, and " "the kernel maintains no information about the lock state.) On the other " "hand, a thread may be unable to acquire a lock because it is already " "acquired by another thread. It then may pass the lock's flag as a futex " "word and the value representing the acquired state as the expected value to " "a B() wait operation. This B() operation will block if and " "only if the lock is still acquired (i.e., the value in the futex word still " "matches the \"acquired state\"). When releasing the lock, a thread has to " "first reset the lock state to not acquired and then execute a futex " "operation that wakes threads blocked on the lock flag used as a futex word " "(this can be further optimized to avoid unnecessary wake-ups). See " "B(7) for more detail on how to use futexes." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Besides the basic wait and wake-up futex functionality, there are further " "futex operations aimed at supporting more complex use cases." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Note that no explicit initialization or destruction is necessary to use " "futexes; the kernel maintains a futex (i.e., the kernel-internal " "implementation artifact) only while operations such as B, " "described below, are being performed on a particular futex word." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Arguments" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I argument points to the futex word. On all platforms, futexes " "are four-byte integers that must be aligned on a four-byte boundary. The " "operation to perform on the futex is specified in the I argument; " "I is a value whose meaning and purpose depends on I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The remaining arguments (I, I, and I) are required " "only for certain of the futex operations described below. Where one of " "these arguments is not required, it is ignored." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For several blocking operations, the I argument is a pointer to a " "I structure that specifies a timeout for the operation. However, " "notwithstanding the prototype shown above, for some operations, the least " "significant four bytes of this argument are instead used as an integer whose " "meaning is determined by the operation. For these operations, the kernel " "casts the I value first to I, then to I, " "and in the remainder of this page, this argument is referred to as I " "when interpreted in this fashion." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Where it is required, the I argument is a pointer to a second futex " "word that is employed by the operation." msgstr "" # #. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The interpretation of the final integer argument, I, depends on the " "operation." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Futex operations" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I argument consists of two parts: a command that specifies the " "operation to be performed, bitwise ORed with zero or more options that " "modify the behaviour of the operation. The options that may be included in " "I are as follows:" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B (since Linux 2.6.22)" msgstr "" #. commit 34f01cc1f512fa783302982776895c73714ebbc2 #. I.e., It allows the kernel choose the fast path for validating #. the user-space address and avoids expensive VMA lookups, #. taking reference counts on file backing store, and so on. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This option bit can be employed with all futex operations. It tells the " "kernel that the futex is process-private and not shared with another process " "(i.e., it is being used for synchronization only between threads of the same " "process). This allows the kernel to make some additional performance " "optimizations." msgstr "" #. except the obsolete FUTEX_FD, for which the "private" flag was #. meaningless #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "As a convenience, Ilinux/futex.hE> defines a set of constants with " "the suffix B<_PRIVATE> that are equivalents of all of the operations listed " "below, but with the B ORed into the constant value. " "Thus, there are B, B, and so on." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B (since Linux 2.6.28)" msgstr "" #. commit 1acdac104668a0834cfa267de9946fac7764d486 #. commit 337f13046ff03717a9e99675284a817527440a49 #. commit bf22a6976897977b0a3f1aeba6823c959fc4fdae #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This option bit can be employed only with the B, " "B, (since Linux 4.5) B, and (since Linux " "5.14) B operations." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If this option is set, the kernel measures the I against the " "B clock." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If this option is not set, the kernel measures the I against the " "B clock." msgstr "" # #. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The operation specified in I is one of the following:" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B (since Linux 2.6.0)" msgstr "" #. Strictly speaking, since some time in Linux 2.5.x #. FIXME: Torvald, I think we may need to add some explanation of #. "totally ordered" here. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This operation tests that the value at the futex word pointed to by the " "address I still contains the expected value I, and if so, then " "sleeps waiting for a B operation on the futex word. The load of " "the value of the futex word is an atomic memory access (i.e., using atomic " "machine instructions of the respective architecture). This load, the " "comparison with the expected value, and starting to sleep are performed " "atomically and totally ordered with respect to other futex operations on the " "same futex word. If the thread starts to sleep, it is considered a waiter " "on this futex word. If the futex value does not match I, then the call " "fails immediately with the error B." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The purpose of the comparison with the expected value is to prevent lost " "wake-ups. If another thread changed the value of the futex word after the " "calling thread decided to block based on the prior value, and if the other " "thread executed a B operation (or similar wake-up) after the " "value change and before this B operation, then the calling " "thread will observe the value change and will not start to sleep." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the I is not NULL, the structure it points to specifies a " "timeout for the wait. (This interval will be rounded up to the system clock " "granularity, and is guaranteed not to expire early.) The timeout is by " "default measured according to the B clock, but, since Linux " "4.5, the B clock can be selected by specifying " "B in I. If I is NULL, the call " "blocks indefinitely." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I: for B, I is interpreted as a I " "value. This differs from other futex operations, where I is " "interpreted as an absolute value. To obtain the equivalent of B " "with an absolute timeout, employ B with I specified " "as B." msgstr "" # # #. FIXME . (Torvald) I think we should remove this. Or maybe adapt to a #. different example. #. For #. .BR futex (7), #. this call is executed if decrementing the count gave a negative value #. (indicating contention), #. and will sleep until another process or thread releases #. the futex and executes the #. .B FUTEX_WAKE #. operation. #. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The arguments I and I are ignored." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B (since Linux 2.6.0)" msgstr "" #. Strictly speaking, since Linux 2.5.x #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This operation wakes at most I of the waiters that are waiting (e.g., " "inside B) on the futex word at the address I. Most " "commonly, I is specified as either 1 (wake up a single waiter) or " "B (wake up all waiters). No guarantee is provided about which " "waiters are awoken (e.g., a waiter with a higher scheduling priority is not " "guaranteed to be awoken in preference to a waiter with a lower priority)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The arguments I, I, and I are ignored." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B (from Linux 2.6.0 up to and including Linux 2.6.25)" msgstr "" #. Strictly speaking, from Linux 2.5.x to Linux 2.6.25 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This operation creates a file descriptor that is associated with the futex " "at I. The caller must close the returned file descriptor after use. " "When another process or thread performs a B on the futex word, " "the file descriptor indicates as being readable with B