diff options
Diffstat (limited to 'po/ru/man2/membarrier.2.po')
-rw-r--r-- | po/ru/man2/membarrier.2.po | 1300 |
1 files changed, 1300 insertions, 0 deletions
diff --git a/po/ru/man2/membarrier.2.po b/po/ru/man2/membarrier.2.po new file mode 100644 index 00000000..5dc99c66 --- /dev/null +++ b/po/ru/man2/membarrier.2.po @@ -0,0 +1,1300 @@ +# Russian translation of manpages +# This file is distributed under the same license as the manpages-l10n package. +# Copyright © of this file: +# aereiae <aereiae@gmail.com>, 2014. +# Alexey <a.chepugov@gmail.com>, 2015. +# Azamat Hackimov <azamat.hackimov@gmail.com>, 2013-2017. +# Dmitriy S. Seregin <dseregin@59.ru>, 2013. +# Dmitry Bolkhovskikh <d20052005@yandex.ru>, 2017. +# ITriskTI <ITriskTI@gmail.com>, 2013. +# Max Is <ismax799@gmail.com>, 2016. +# Yuri Kozlov <yuray@komyakino.ru>, 2011-2019. +# Иван Павлов <pavia00@gmail.com>, 2017. +# Малянов Евгений Викторович <maljanow@outlook.com>, 2014. +msgid "" +msgstr "" +"Project-Id-Version: manpages-l10n\n" +"POT-Creation-Date: 2024-03-01 17:01+0100\n" +"PO-Revision-Date: 2019-10-06 08:59+0300\n" +"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" +"Language-Team: Russian <man-pages-ru-talks@lists.sourceforge.net>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " +"(n%100>=11 && n%100<=14)? 2 : 3);\n" +"X-Generator: Lokalize 2.0\n" + +#. type: TH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "membarrier" +msgstr "membarrier" + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "2023-10-31" +msgstr "31 октября 2023 г." + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "Linux man-pages 6.06" +msgstr "Linux man-pages 6.06" + +#. 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 "membarrier - issue memory barriers on a set of threads" +msgstr "membarrier - задаёт барьеры памяти в наборе нитей" + +#. 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<libc>, 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 E<lt>linux/membarrier.hE<gt>> /* Definition of B<MEMBARRIER_*> constants */\n" +"B<#include E<lt>sys/syscall.hE<gt>> /* Definition of B<SYS_*> constants */\n" +"B<#include E<lt>unistd.hE<gt>>\n" +msgstr "" +"B<#include E<lt>linux/membarrier.hE<gt>> /* определения констант B<MEMBARRIER_*> */\n" +"B<#include E<lt>sys/syscall.hE<gt>> /* определения констант B<SYS_*> */\n" +"B<#include E<lt>unistd.hE<gt>>\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<int syscall(SYS_membarrier, int >I<cmd>B<, unsigned int >I<flags>B<, int >I<cpu_id>B<);>\n" +msgstr "B<int syscall(SYS_membarrier, int >I<cmd>B<, unsigned int >I<flags>B<, int >I<cpu_id>B<);>\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<Note>: glibc provides no wrapper for B<membarrier>(), necessitating the " +"use of B<syscall>(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<membarrier>() system call helps reducing the overhead of the memory " +"barrier instructions required to order memory accesses on multi-core " +"systems. However, this system call is heavier than a memory barrier, so " +"using it effectively is I<not> as simple as replacing memory barriers with " +"this system call, but requires understanding of the details below." +msgstr "" +"Системный вызов B<membarrier>() помогает сократить накладные расходы " +"инструкций барьера памяти, которые требуются при доступе к памяти в " +"многоядерных системах. Однако данный системный вызов затратнее чем барьер " +"памяти, поэтому чтобы использовать его эффективно I<недостаточно> просто " +"заменить им барьеры памяти, требуется понимание описанного далее." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Use of memory barriers needs to be done taking into account that a memory " +"barrier always needs to be either matched with its memory barrier " +"counterparts, or that the architecture's memory model doesn't require the " +"matching barriers." +msgstr "" +"При использовании барьеров памяти нужно принимать во внимание, что барьер " +"памяти всегда должен или иметь противоположную сторону барьера, или что " +"модель памяти архитектуры этого не требует." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"There are cases where one side of the matching barriers (which we will refer " +"to as \"fast side\") is executed much more often than the other (which we " +"will refer to as \"slow side\"). This is a prime target for the use of " +"B<membarrier>(). The key idea is to replace, for these matching barriers, " +"the fast-side memory barriers by simple compiler barriers, for example:" +msgstr "" +"При работе бывает, что одна сторона барьера (которую будем называть «быстрой " +"стороной») применяется чаще чем другая (которую будем называть «медленной " +"стороной»). Это основная цель использования B<membarrier>(). Основная идея в " +"замене этих барьеров: быстрые стороны барьеров — простыми барьерами " +"компилятора:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "asm volatile (\"\" : : : \"memory\")\n" +msgstr "asm volatile (\"\" : : : \"memory\")\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "and replace the slow-side memory barriers by calls to B<membarrier>()." +msgstr "а медленные стороны барьеров — вызовами B<membarrier>()." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This will add overhead to the slow side, and remove overhead from the fast " +"side, thus resulting in an overall performance increase as long as the slow " +"side is infrequent enough that the overhead of the B<membarrier>() calls " +"does not outweigh the performance gain on the fast side." +msgstr "" +"Это добавит накладных расходов к медленной стороне и удалит расходы у " +"быстрой стороны, что в результате повысит общую производительность в " +"зависимости от того, как часто используются вызовы B<membarrier>() у " +"медленной стороны, из-за которой возникают издержки, и не перевесит ли это " +"увеличение производительности быстрой стороны." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The I<cmd> argument is one of the following:" +msgstr "Аргумент I<cmd> может принимать одно из следующих значений:" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_QUERY> (since Linux 4.3)" +msgstr "B<MEMBARRIER_CMD_QUERY> (начиная с Linux 4.3)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Query the set of supported commands. The return value of the call is a bit " +"mask of supported commands. B<MEMBARRIER_CMD_QUERY>, which has the value 0, " +"is not itself included in this bit mask. This command is always supported " +"(on kernels where B<membarrier>() is provided)." +msgstr "" +"Запросить набор поддерживаемых команд. Возвращаемое вызовом значение " +"представляет собой битовую маску поддерживаемых команд. Сама команда " +"B<MEMBARRIER_CMD_QUERY> имеет значение 0 и не включается в эту маску. Данная " +"команда поддерживается всегда (в ядрах с поддержкой B<membarrier>())." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_GLOBAL> (since Linux 4.16)" +msgstr "B<MEMBARRIER_CMD_GLOBAL> (начиная с Linux 4.16)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Ensure that all threads from all processes on the system pass through a " +"state where all memory accesses to user-space addresses match program order " +"between entry to and return from the B<membarrier>() system call. All " +"threads on the system are targeted by this command." +msgstr "" +"Проверить, что все потоки всех процессов в системе прошли через состояние, " +"где все доступы к памяти по адресам пространства пользователя соответствуют " +"программному порядку между входом и возвратом из системного вызова " +"B<membarrier>(). Все потоки в системе являются целью этой команды." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_GLOBAL_EXPEDITED> (since Linux 4.16)" +msgstr "B<MEMBARRIER_CMD_GLOBAL_EXPEDITED> (начиная с Linux 4.16)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Execute a memory barrier on all running threads of all processes that " +"previously registered with B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>." +msgstr "" +"Установить барьер памяти во всех выполняющихся нитях всех процессов, которые " +"были ранее зарегистрированы с помощью " +"B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Upon return from the system call, the calling thread has a guarantee that " +"all running threads have passed through a state where all memory accesses to " +"user-space addresses match program order between entry to and return from " +"the system call (non-running threads are de facto in such a state). This " +"guarantee is provided only for the threads of processes that previously " +"registered with B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>." +msgstr "" +"После возврата из системного вызова вызвавшей нити гарантируется, что все " +"выполняющиеся нити прошли через состояние, где все доступы к памяти по " +"адресам пространства пользователя соответствуют программному порядку между " +"входом и возвратом из системного вызова (не выполняющиеся нити уже в таком " +"состоянии). Это гарантируется только для нитей процессов, которые были ранее " +"зарегистрированы с помощью B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Given that registration is about the intent to receive the barriers, it is " +"valid to invoke B<MEMBARRIER_CMD_GLOBAL_EXPEDITED> from a process that has " +"not employed B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>." +msgstr "" +"Учтите, что регистрация о намерении получать барьеры допускается вызовом " +"B<MEMBARRIER_CMD_GLOBAL_EXPEDITED> только из процесса, который не " +"использовал B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The \"expedited\" commands complete faster than the non-expedited ones; they " +"never block, but have the downside of causing extra overhead." +msgstr "" +"«Курируемые» (expedited) команды выполняются быстрее чем не курируемые; они " +"никогда не блокируются, но на них приходятся дополнительные издержки." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED> (since Linux 4.16)" +msgstr "B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED> (начиная с Linux 4.16)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Register the process's intent to receive B<MEMBARRIER_CMD_GLOBAL_EXPEDITED> " +"memory barriers." +msgstr "" +"Зарегистрировать намерение процесса получать барьеры памяти " +"B<MEMBARRIER_CMD_GLOBAL_EXPEDITED>." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED> (since Linux 4.14)" +msgstr "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED> (начиная с Linux 4.14)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Execute a memory barrier on each running thread belonging to the same " +"process as the calling thread." +msgstr "" +"Применить барьер памяти на все выполняющиеся нити, принадлежащие тому же " +"процессу, что и вызвавшая нить." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Upon return from the system call, the calling thread has a guarantee that " +"all its running thread siblings have passed through a state where all memory " +"accesses to user-space addresses match program order between entry to and " +"return from the system call (non-running threads are de facto in such a " +"state). This guarantee is provided only for threads in the same process as " +"the calling thread." +msgstr "" +"После возврата из системного вызова вызвавшей нити гарантируется, что все " +"выполняющиеся, одноуровневые с ней нити прошли через состояние, где все " +"доступы к памяти по адресам пространства пользователя соответствуют " +"программному порядку между входом и возвратом из системного вызова " +"(невыполняющиеся нити уже в таком состоянии). Это гарантируется только для " +"нитей того же процесса, что и вызвавшая нить." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A process must register its intent to use the private expedited command " +"prior to using it." +msgstr "" +"Процессу нужно регистрировать своё намерение использовать частную курируемую " +"команду до её использования." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED> (since Linux 4.14)" +msgstr "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED> (начиная с Linux 4.14)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Register the process's intent to use B<MEMBARRIER_CMD_PRIVATE_EXPEDITED>." +msgstr "" +"Зарегистрировать намерение процесса использовать " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED>." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE> (since Linux 4.16)" +msgstr "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE> (начиная с Linux 4.16)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"In addition to providing the memory ordering guarantees described in " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED>, upon return from system call the " +"calling thread has a guarantee that all its running thread siblings have " +"executed a core serializing instruction. This guarantee is provided only " +"for threads in the same process as the calling thread." +msgstr "" +"В дополнении к гарантии упорядочивания памяти, описанной в " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED>, после возврата из системного вызова " +"вызвавшей нити гарантируется, что все выполняющиеся, одноуровневые с ней " +"нити выполнили ядерную инструкцию сериализации (core serializing " +"instruction). Это гарантируется только для нитей того же процесса, что и " +"вызвавшая нить." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The \"expedited\" commands complete faster than the non-expedited ones, they " +"never block, but have the downside of causing extra overhead." +msgstr "" +"«Курируемые» (expedited) команды выполняются быстрее чем не курируемые; они " +"никогда не блокируются, но на них приходятся дополнительные издержки." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A process must register its intent to use the private expedited sync core " +"command prior to using it." +msgstr "" +"Процессу нужно регистрировать своё намерение использовать частную курируемую " +"ядерную команду синхронизации до её использования." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE> (since Linux 4.16)" +msgstr "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE> (начиная с Linux 4.16)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Register the process's intent to use " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE>." +msgstr "" +"Зарегистрировать намерение процесса использовать " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE>." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ> (since Linux 5.10)" +msgstr "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ> (начиная с Linux 5.10)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Ensure the caller thread, upon return from system call, that all its running " +"thread siblings have any currently running rseq critical sections restarted " +"if I<flags> parameter is 0; if I<flags> parameter is " +"B<MEMBARRIER_CMD_FLAG_CPU>, then this operation is performed only on CPU " +"indicated by I<cpu_id>. This guarantee is provided only for threads in the " +"same process as the calling thread." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "RSEQ membarrier is only available in the \"private expedited\" form." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "" +#| "A process must register its intent to use the private expedited command " +#| "prior to using it." +msgid "" +"A process must register its intent to use the private expedited rseq command " +"prior to using it." +msgstr "" +"Процессу нужно регистрировать своё намерение использовать частную курируемую " +"команду до её использования." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ> (since Linux 5.10)" +msgstr "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ> (начиная с Linux 5.10)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Register the process's intent to use " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ>." +msgstr "" +"Зарегистрировать намерение процесса использовать " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ>." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<MEMBARRIER_CMD_SHARED> (since Linux 4.3)" +msgstr "B<MEMBARRIER_CMD_SHARED> (начиная с Linux 4.3)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is an alias for B<MEMBARRIER_CMD_GLOBAL> that exists for header " +"backward compatibility." +msgstr "" +"Псевдоним B<MEMBARRIER_CMD_GLOBAL>, существует для обратной совместимости в " +"заголовке." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The I<flags> argument must be specified as 0 unless the command is " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ>, in which case I<flags> can be " +"either 0 or B<MEMBARRIER_CMD_FLAG_CPU>." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The I<cpu_id> argument is ignored unless I<flags> is " +"B<MEMBARRIER_CMD_FLAG_CPU>, in which case it must specify the CPU targeted " +"by this membarrier command." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"All memory accesses performed in program order from each targeted thread are " +"guaranteed to be ordered with respect to B<membarrier>()." +msgstr "" +"Все доступы к памяти, выполняемые в программном порядке из каждого целевого " +"потока, гарантированно упорядочены в отношении B<membarrier>()." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If we use the semantic I<barrier()> to represent a compiler barrier forcing " +"memory accesses to be performed in program order across the barrier, and " +"I<smp_mb()> to represent explicit memory barriers forcing full memory " +"ordering across the barrier, we have the following ordering table for each " +"pairing of I<barrier()>, B<membarrier>(), and I<smp_mb()>. The pair " +"ordering is detailed as (O: ordered, X: not ordered):" +msgstr "" +"Если использовать семантику I<barrier()> для представления барьера " +"компилятора, обеспечивающего доступа к памяти, выполняемого в программном " +"порядке для пересечения барьера, и I<smp_mb()> — для представления явных " +"барьеров памяти, обеспечивающих полный упорядоченный доступ к памяти через " +"барьер, то получится следующая упорядочивающая таблица для каждой пары " +"I<barrier()>, B<membarrier>() и I<smp_mb()>. Наличие порядка в паре показано " +"знаком (O: упорядочено, X: не упорядочено):" + +#. type: tbl table +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "barrier()" +msgstr "barrier()" + +#. type: tbl table +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "smp_mb()" +msgstr "smp_mb()" + +#. type: tbl table +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "membarrier()" +msgstr "membarrier()" + +#. type: tbl table +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "X" +msgstr "X" + +#. type: tbl table +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "O" +msgstr "O" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "RETURN VALUE" +msgstr "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "" +#| "On success, the B<MEMBARRIER_CMD_QUERY> operation returns a bit mask of " +#| "supported commands, and the B<MEMBARRIER_CMD_GLOBAL>, " +#| "B<MEMBARRIER_CMD_GLOBAL_EXPEDITED>, " +#| "B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>, " +#| "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED>, " +#| "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED>, " +#| "B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE>, and " +#| "B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE> operations return " +#| "zero. On error, -1 is returned, and I<errno> is set appropriately." +msgid "" +"On success, the B<MEMBARRIER_CMD_QUERY> operation returns a bit mask of " +"supported commands, and the B<MEMBARRIER_CMD_GLOBAL>, " +"B<MEMBARRIER_CMD_GLOBAL_EXPEDITED>, " +"B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>, " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED>, " +"B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED>, " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE>, and " +"B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE> operations return " +"zero. On error, -1 is returned, and I<errno> is set to indicate the error." +msgstr "" +"При успешном выполнении операции B<MEMBARRIER_CMD_QUERY> возвращается " +"битовая маска поддерживаемых команд, а операции B<MEMBARRIER_CMD_GLOBAL>, " +"B<MEMBARRIER_CMD_GLOBAL_EXPEDITED>, " +"B<MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED>, " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED>, " +"B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED>, " +"B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE> и " +"B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE> возвращают ноль. При " +"ошибке возвращается -1 и в I<errno> устанавливается соответствующее значение." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For a given command, with I<flags> set to 0, this system call is guaranteed " +"to always return the same value until reboot. Further calls with the same " +"arguments will lead to the same result. Therefore, with I<flags> set to 0, " +"error handling is required only for the first call to B<membarrier>()." +msgstr "" +"Для данной команды, если флаг I<flags> равен 0, то системный вызов всегда " +"гарантирует возврат одного и того же значения до перезагрузки. Последующие " +"вызовы с теми же аргументами всегда возвращают тот же результат. Поэтому, " +"если I<flags> равен 0, то обработка ошибок требуется только при первом " +"вызове B<membarrier>()." + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "ERRORS" +msgstr "ОШИБКИ" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EINVAL>" +msgstr "B<EINVAL>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<cmd> is invalid, or I<flags> is nonzero, or the B<MEMBARRIER_CMD_GLOBAL> " +"command is disabled because the I<nohz_full> CPU parameter has been set, or " +"the B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE> and " +"B<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE> commands are not " +"implemented by the architecture." +msgstr "" +"Неверное значение I<cmd>, значение I<flags> не равно нулю, отключена команда " +"B<MEMBARRIER_CMD_GLOBAL>, так как указан параметр ЦП I<nohz_full> или " +"команды B<MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE> " +"иB<MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE> не реализованы для " +"архитектуры." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<ENOSYS>" +msgstr "B<ENOSYS>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The B<membarrier>() system call is not implemented by this kernel." +msgstr "Системный вызов B<membarrier>() не реализован в данном ядре." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EPERM>" +msgstr "B<EPERM>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The current process was not registered prior to using private expedited " +"commands." +msgstr "" +"Текущий процесс не зарегистрирован до использования частных курируемых " +"команд." + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "STANDARDS" +msgstr "СТАНДАРТЫ" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "Linux." +msgstr "Linux." + +#. type: SH +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "HISTORY" +msgstr "ИСТОРИЯ" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "Linux" +msgid "Linux 4.3." +msgstr "Linux" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "Before Linux 5.10, the prototype was:" +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<int membarrier(int >I<cmd>B<, int >I<flags>B<);>\n" +msgstr "B<int membarrier(int >I<cmd>B<, int >I<flags>B<);>\n" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "NOTES" +msgstr "ЗАМЕЧАНИЯ" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A memory barrier instruction is part of the instruction set of architectures " +"with weakly ordered memory models. It orders memory accesses prior to the " +"barrier and after the barrier with respect to matching barriers on other " +"cores. For instance, a load fence can order loads prior to and following " +"that fence with respect to stores ordered by store fences." +msgstr "" +"Инструкция барьера памяти является частью системы команд архитектуры со " +"слабо упорядоченными моделями памяти. Она упорядочивает доступ к памяти до " +"барьера и после барьера в соответствии совпадающими барьерами на других " +"ядрах. Например, загрузка барьера (fence) может упорядочить загрузку до и " +"после этого барьера в соответствии порядком хранилища, установленного " +"барьерами хранилища." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Program order is the order in which instructions are ordered in the program " +"assembly code." +msgstr "" +"Программный порядок — это порядок, в котором инструкции упорядочены в " +"ассемблерном коде программы." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Examples where B<membarrier>() can be useful include implementations of " +"Read-Copy-Update libraries and garbage collectors." +msgstr "" +"Вызов B<membarrier>() может быть полезным для реализации библиотек чтения-" +"копирования-обновления или сборщиков мусора." + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "EXAMPLES" +msgstr "ПРИМЕРЫ" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Assuming a multithreaded application where \"fast_path()\" is executed very " +"frequently, and where \"slow_path()\" is executed infrequently, the " +"following code (x86) can be transformed using B<membarrier>():" +msgstr "" +"Предполагая, что в многонитевой программе «fast_path()» выполняется очень " +"часто, а «slow_path()» — редко, следующий код (x86) можно преобразовать " +"используя B<membarrier>():" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"#include E<lt>stdlib.hE<gt>\n" +"\\&\n" +"static volatile int a, b;\n" +"\\&\n" +"static void\n" +"fast_path(int *read_b)\n" +"{\n" +" a = 1;\n" +" asm volatile (\"mfence\" : : : \"memory\");\n" +" *read_b = b;\n" +"}\n" +"\\&\n" +"static void\n" +"slow_path(int *read_a)\n" +"{\n" +" b = 1;\n" +" asm volatile (\"mfence\" : : : \"memory\");\n" +" *read_a = a;\n" +"}\n" +"\\&\n" +"int\n" +"main(void)\n" +"{\n" +" int read_a, read_b;\n" +"\\&\n" +" /*\n" +" * Real applications would call fast_path() and slow_path()\n" +" * from different threads. Call those from main() to keep\n" +" * this example short.\n" +" */\n" +"\\&\n" +" slow_path(&read_a);\n" +" fast_path(&read_b);\n" +"\\&\n" +" /*\n" +" * read_b == 0 implies read_a == 1 and\n" +" * read_a == 0 implies read_b == 1.\n" +" */\n" +"\\&\n" +" if (read_b == 0 && read_a == 0)\n" +" abort();\n" +"\\&\n" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The code above transformed to use B<membarrier>() becomes:" +msgstr "Этот же код, переписанный с использованием B<membarrier>():" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"#define _GNU_SOURCE\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +"#include E<lt>sys/syscall.hE<gt>\n" +"#include E<lt>linux/membarrier.hE<gt>\n" +"\\&\n" +"static volatile int a, b;\n" +"\\&\n" +"static int\n" +"membarrier(int cmd, unsigned int flags, int cpu_id)\n" +"{\n" +" return syscall(__NR_membarrier, cmd, flags, cpu_id);\n" +"}\n" +"\\&\n" +"static int\n" +"init_membarrier(void)\n" +"{\n" +" int ret;\n" +"\\&\n" +" /* Check that membarrier() is supported. */\n" +"\\&\n" +" ret = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);\n" +" if (ret E<lt> 0) {\n" +" perror(\"membarrier\");\n" +" return -1;\n" +" }\n" +"\\&\n" +" if (!(ret & MEMBARRIER_CMD_GLOBAL)) {\n" +" fprintf(stderr,\n" +" \"membarrier does not support MEMBARRIER_CMD_GLOBAL\\en\");\n" +" return -1;\n" +" }\n" +"\\&\n" +" return 0;\n" +"}\n" +"\\&\n" +"static void\n" +"fast_path(int *read_b)\n" +"{\n" +" a = 1;\n" +" asm volatile (\"\" : : : \"memory\");\n" +" *read_b = b;\n" +"}\n" +"\\&\n" +"static void\n" +"slow_path(int *read_a)\n" +"{\n" +" b = 1;\n" +" membarrier(MEMBARRIER_CMD_GLOBAL, 0, 0);\n" +" *read_a = a;\n" +"}\n" +"\\&\n" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int read_a, read_b;\n" +"\\&\n" +" if (init_membarrier())\n" +" exit(EXIT_FAILURE);\n" +"\\&\n" +" /*\n" +" * Real applications would call fast_path() and slow_path()\n" +" * from different threads. Call those from main() to keep\n" +" * this example short.\n" +" */\n" +"\\&\n" +" slow_path(&read_a);\n" +" fast_path(&read_b);\n" +"\\&\n" +" /*\n" +" * read_b == 0 implies read_a == 1 and\n" +" * read_a == 0 implies read_b == 1.\n" +" */\n" +"\\&\n" +" if (read_b == 0 && read_a == 0)\n" +" abort();\n" +"\\&\n" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "2022-12-15" +msgstr "15 декабря 2022 г." + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "Linux man-pages 6.03" +msgstr "Linux man-pages 6.03" + +#. type: SH +#: debian-bookworm +#, no-wrap +msgid "VERSIONS" +msgstr "ВЕРСИИ" + +#. type: Plain text +#: debian-bookworm +msgid "The B<membarrier>() system call was added in Linux 4.3." +msgstr "Системный вызов B<membarrier>() впервые появился в Linux версии 4.3." + +#. type: Plain text +#: debian-bookworm +msgid "Before Linux 5.10, the prototype for B<membarrier>() was:" +msgstr "" + +#. .SH SEE ALSO +#. FIXME See if the following syscalls make it into Linux 4.15 or later +#. .BR cpu_opv (2), +#. .BR rseq (2) +#. type: Plain text +#: debian-bookworm +msgid "B<membarrier>() is Linux-specific." +msgstr "Вызов B<membarrier>() есть только в Linux." + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#include E<lt>stdlib.hE<gt>\n" +msgstr "#include E<lt>stdlib.hE<gt>\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "static volatile int a, b;\n" +msgstr "static volatile int a, b;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static void\n" +"fast_path(int *read_b)\n" +"{\n" +" a = 1;\n" +" asm volatile (\"mfence\" : : : \"memory\");\n" +" *read_b = b;\n" +"}\n" +msgstr "" +"static void\n" +"fast_path(int *read_b)\n" +"{\n" +" a = 1;\n" +" asm volatile (\"mfence\" : : : \"memory\");\n" +" *read_b = b;\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static void\n" +"slow_path(int *read_a)\n" +"{\n" +" b = 1;\n" +" asm volatile (\"mfence\" : : : \"memory\");\n" +" *read_a = a;\n" +"}\n" +msgstr "" +"static void\n" +"slow_path(int *read_a)\n" +"{\n" +" b = 1;\n" +" asm volatile (\"mfence\" : : : \"memory\");\n" +" *read_a = a;\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"main(void)\n" +"{\n" +" int read_a, read_b;\n" +msgstr "" +"int\n" +"main(void)\n" +"{\n" +" int read_a, read_b;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /*\n" +" * Real applications would call fast_path() and slow_path()\n" +" * from different threads. Call those from main() to keep\n" +" * this example short.\n" +" */\n" +msgstr "" +" /*\n" +" * В реальных приложениях вызовы fast_path() и slow_path()\n" +" * были бы в разных нитях. Их вызов из main() сделан только\n" +" * для укорачивания данного примера.\n" +" */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" slow_path(&read_a);\n" +" fast_path(&read_b);\n" +msgstr "" +" slow_path(&read_a);\n" +" fast_path(&read_b);\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /*\n" +" * read_b == 0 implies read_a == 1 and\n" +" * read_a == 0 implies read_b == 1.\n" +" */\n" +msgstr "" +" /*\n" +" * read_b == 0 подразумевает read_a == 1 и\n" +" * read_a == 0 подразумевает read_b == 1.\n" +" */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (read_b == 0 && read_a == 0)\n" +" abort();\n" +msgstr "" +" if (read_b == 0 && read_a == 0)\n" +" abort();\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" +" exit(EXIT_SUCCESS);\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"#define _GNU_SOURCE\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +"#include E<lt>sys/syscall.hE<gt>\n" +"#include E<lt>linux/membarrier.hE<gt>\n" +msgstr "" +"#define _GNU_SOURCE\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +"#include E<lt>sys/syscall.hE<gt>\n" +"#include E<lt>linux/membarrier.hE<gt>\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static int\n" +"membarrier(int cmd, unsigned int flags, int cpu_id)\n" +"{\n" +" return syscall(__NR_membarrier, cmd, flags, cpu_id);\n" +"}\n" +msgstr "" +"static int\n" +"membarrier(int cmd, unsigned int flags, int cpu_id)\n" +"{\n" +" return syscall(__NR_membarrier, cmd, flags, cpu_id);\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static int\n" +"init_membarrier(void)\n" +"{\n" +" int ret;\n" +msgstr "" +"static int\n" +"init_membarrier(void)\n" +"{\n" +" int ret;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Check that membarrier() is supported. */\n" +msgstr " /* Проверка поддержки в функции membarrier() */\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" ret = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);\n" +" if (ret E<lt> 0) {\n" +" perror(\"membarrier\");\n" +" return -1;\n" +" }\n" +msgstr "" +" ret = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);\n" +" if (ret E<lt> 0) {\n" +" perror(\"membarrier\");\n" +" return -1;\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (!(ret & MEMBARRIER_CMD_GLOBAL)) {\n" +" fprintf(stderr,\n" +" \"membarrier does not support MEMBARRIER_CMD_GLOBAL\\en\");\n" +" return -1;\n" +" }\n" +msgstr "" +" if (!(ret & MEMBARRIER_CMD_GLOBAL)) {\n" +" fprintf(stderr,\n" +" \"membarrier не поддерживает MEMBARRIER_CMD_GLOBAL\\en\");\n" +" return -1;\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return 0;\n" +"}\n" +msgstr "" +" return 0;\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static void\n" +"fast_path(int *read_b)\n" +"{\n" +" a = 1;\n" +" asm volatile (\"\" : : : \"memory\");\n" +" *read_b = b;\n" +"}\n" +msgstr "" +"static void\n" +"fast_path(int *read_b)\n" +"{\n" +" a = 1;\n" +" asm volatile (\"\" : : : \"memory\");\n" +" *read_b = b;\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static void\n" +"slow_path(int *read_a)\n" +"{\n" +" b = 1;\n" +" membarrier(MEMBARRIER_CMD_GLOBAL, 0, 0);\n" +" *read_a = a;\n" +"}\n" +msgstr "" +"static void\n" +"slow_path(int *read_a)\n" +"{\n" +" b = 1;\n" +" membarrier(MEMBARRIER_CMD_GLOBAL, 0, 0);\n" +" *read_a = a;\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int read_a, read_b;\n" +msgstr "" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int read_a, read_b;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (init_membarrier())\n" +" exit(EXIT_FAILURE);\n" +msgstr "" +" if (init_membarrier())\n" +" exit(EXIT_FAILURE);\n" + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "2023-05-03" +msgstr "3 мая 2023 г." + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "Linux man-pages 6.05.01" +msgstr "Linux man-pages 6.05.01" + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "2023-03-30" +msgstr "30 марта 2023 г." + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "Linux man-pages 6.04" +msgstr "Linux man-pages 6.04" |