RU2816292C1 - Method of controlling reading from shared memory resource and writing to it (versions), system and computer-readable medium implementing said method - Google Patents

Method of controlling reading from shared memory resource and writing to it (versions), system and computer-readable medium implementing said method Download PDF

Info

Publication number
RU2816292C1
RU2816292C1 RU2023117238A RU2023117238A RU2816292C1 RU 2816292 C1 RU2816292 C1 RU 2816292C1 RU 2023117238 A RU2023117238 A RU 2023117238A RU 2023117238 A RU2023117238 A RU 2023117238A RU 2816292 C1 RU2816292 C1 RU 2816292C1
Authority
RU
Russia
Prior art keywords
value
shared memory
pointer
memory resource
read
Prior art date
Application number
RU2023117238A
Other languages
Russian (ru)
Inventor
Георгий Михайлович Зуйков
Original Assignee
Общество С Ограниченной Ответственностью "Яндекс.Такси"
Filing date
Publication date
Application filed by Общество С Ограниченной Ответственностью "Яндекс.Такси" filed Critical Общество С Ограниченной Ответственностью "Яндекс.Такси"
Application granted granted Critical
Publication of RU2816292C1 publication Critical patent/RU2816292C1/en

Links

Abstract

FIELD: physics.
SUBSTANCE: invention relates to methods, a system and a data medium for controlling reading-writing of a shared memory resource. In the method, when a request for reading a shared memory resource or for writing to a shared memory resource occurs, performing an attempt to capture a read mutex and/or a write mutex, respectively, by performing a compare and swap (CAS) operation on the current value of the indicator, at that, upon successful execution of the CAS operation, a change in the value of the indicator tending from zero is performed, wherein, if said request, for which the CAS operation has been successfully performed, is a write request, then additionally setting the sign of the changed value of said indicator to the first sign, for each request, the value of said sign is checked and if the checked value of said sign is equal to a predetermined value, performing writing to the shared memory resource according to the write request from the author, if the checked value of the said indicator with a sign is different from the said predetermined value, performing reading from a shared memory resource according to a read request from a reader, upon completion of the write or read operation, the read mutex or the write mutex are released, respectively, by performing a CAS operation on the current value of the indicator, at which a change in the value of the indicator tending to zero is performed.
EFFECT: high efficiency of read and write operations of a shared resource.
19 cl, 4 dwg

Description

Область техникиField of technology

[0001] Настоящее раскрытие относится к технологии разделения доступа к общим ресурсам в системе с параллельными вычислениями.[0001] The present disclosure relates to a technology for sharing access to shared resources in a parallel computing system.

Уровень техникиState of the art

[0002] В реализующем параллельные вычисления серверном пространстве с приоритетом читателей необходимо управлять чтением и записью данных, хранящихся в общем ресурсе хранения (например, на жестком диске (HDD), твердотельном накопителе (SSD) или в энергонезависимой экспресс-памяти (NVMe)), для обеспечения такого приоритета читателей (т.е. сокращения числа блокировок читателей потоками записи) и не допущения конфликтов обращения к данным (например, состояний гонок данных) и, как следствие, ошибок в данных. Кроме того, важно, чтобы такое управление чтением и записью данных само по себе снижало использование памяти, например, опиралось на значение одного указателя блокировки.[0002] In a reader-first parallel computing server space, it is necessary to control the reading and writing of data stored in a shared storage resource (e.g., hard disk drive (HDD), solid state drive (SSD), or non-volatile memory express (NVMe)) to ensure such priority for readers (i.e., reducing the number of blocking of readers by write threads) and avoiding data access conflicts (for example, data race conditions) and, as a result, data errors. It is also important that such data read and write control itself reduces memory usage, such as relying on the value of a single lock pointer.

[0003] Из уровня техники известен документ US 2013290967 A1 (опубл. 31.10.2013), в котором раскрыт рассматриваемый в качестве ближайшего аналога способ реализации блокировок чтения-записи. В способе, раскрытом в документе ‘967 (см., например, пункт 1 формулы изобретения), в ответ на определение того, что по меньшей мере один другой поток приложения, исполняющегося на ядре процессора в кластере ядер процессора, который включает в себя ядро процессора, на котором исполняется поток записи, ожидает получения глобальной блокировки для записи, передают упомянутому другому потоку приложения владение специфичной для этого кластера (т.е. локальной) блокировкой для записи без освобождения (и повторного захвата) глобальной блокировки. Одновременно с этим документ ‘967 предусматривает ряд политик, одной из которых является именно политика с приоритетом читателя (см., например, абзац [0216] описания).[0003] Document US 2013290967 A1 (published on October 31, 2013) is known from the prior art, which discloses a method for implementing read-write locks considered as the closest analogue. In the method disclosed in the '967 document (see, for example, claim 1), in response to determining that at least one other application thread executing on a processor core in a cluster of processor cores that includes the processor core , on which a writer thread is executing and is waiting to acquire a global write lock, transfer said other application thread ownership of the cluster-specific (i.e., local) write lock without releasing (and reacquiring) the global lock. At the same time, document '967 provides a number of policies, one of which is the reader priority policy (see, for example, paragraph [0216] of the description).

[0004] Таким образом, в способе, раскрытом в документе ‘967, предлагается администрировать потоки записи и чтения, используя различные комбинации как локальных, так и глобальных блокировок (дополнительно см., например, абзац [0082] описания документа ‘967). Такое решение по документу ‘967 уменьшает число миграций владения блокировкой между потоками, исполняющимися на разных кластерах (см., например, абзацы [0007], [0012] описания документа ‘967). Тем не менее, такое управление является более сложным с позиции потребляемых ресурсов, поскольку оно опирается не на значение одного указателя блокировки. Поэтому решение по документу ‘967 не снижает требования к памяти.[0004] Thus, the method disclosed in document '967 proposes to administer write and read threads using various combinations of both local and global locks (for further reference, see, for example, paragraph [0082] of the description of document '967). This solution according to document '967 reduces the number of lock ownership migrations between threads executing on different clusters (see, for example, paragraphs [0007], [0012] of the description of document '967). However, such control is more complex in terms of resource consumption, since it does not rely on the value of a single lock pointer. Therefore, the '967 solution does not reduce memory requirements.

Сущность изобретенияThe essence of the invention

[0005] Предложенная в данной заявке технология решает или по меньшей мере сокращает негативное влияние одной или нескольких описанных выше проблем, имеющихся в уровне техники, благодаря, по меньшей мере, использованию указателя блокировки со знаком, сигнализирующего как общее количество запросов в очереди запросов, которые подлежат выполнению, так и то, имеется ли среди упомянутых запросов запрос на запись.[0005] The technology proposed herein solves or at least reduces the negative impact of one or more of the problems described above in the prior art by at least using a signed block indicator signaling both the total number of requests in the request queue that are to be executed, and whether among the mentioned requests there is a write request.

[0006] Таким образом, в первом аспекте настоящего раскрытия предложен реализуемый компьютером способ управления записью в разделяемый ресурс памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти, причем способ содержит этапы, на которых: - принимают запрос на запись в разделяемый ресурс памяти от писателя; - считывают текущее значение указателя, связанного с упомянутым разделяемым ресурсом памяти, причем значение указателя указывает общее количество запросов, подлежащих выполнению, и то, имеется ли среди упомянутых запросов запрос на запись; - определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись: -- в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - осуществляют попытку захватить мьютекс на запись посредством выполнения атомарной операции сравнения с обменом (CAS) над текущим значением указателя: --- в случае неуспешного выполнения операции CAS, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - выполняют стремящееся от нуля изменение значения указателя и устанавливают знаком измененного значения указателя упомянутый первый знак, - считывают текущее значение указателя для определения, имеются ли незавершенные операции чтения из упомянутого разделяемого ресурса памяти, соответствующие одному или более ранее принятым запросам на чтение соответственно от одного или более читателей: -- в случае, если незавершенные операции чтения имеются: --- ожидают завершения всех незавершенных операций чтения, -- в случае, если незавершенные операции чтения отсутствуют: --- осуществляют операцию записи в разделяемый ресурс памяти, - освобождают мьютекс на запись посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.[0006] Thus, the first aspect of the present disclosure provides a computer-implemented method for controlling writes to a shared memory resource in a read-priority system in which concurrent reading from a shared memory resource by multiple readers is permitted, and writing to a shared memory resource is permitted by a single writer at provided that there are no reading operations from the shared memory resource, and the method contains the steps of: receiving a request to write to the shared memory resource from the writer; - reading the current value of a pointer associated with said shared memory resource, the value of the pointer indicating the total number of requests to be executed and whether among said requests is a write request; - determine whether the current pointer value has the first character, which indicates the presence of a write request: - if it is determined that the current pointer value has the first character, return to the stage of reading the current pointer value, otherwise - attempt to seize the mutex on recording by performing an atomic comparison with exchange (CAS) operation on the current pointer value: --- if the CAS operation is unsuccessful, return to the stage of reading the current pointer value, otherwise, perform a change in the pointer value tending from zero and set it to the sign of the changed pointer value said first character, - read the current pointer value to determine whether there are pending read operations from said shared memory resource corresponding to one or more previously received read requests, respectively, from one or more readers: - in case there are pending read operations available: --- wait for completion of all pending read operations, -- if there are no pending read operations: --- perform a write operation to a shared memory resource, - release the write mutex by performing an atomic CAS operation on the current pointer value, when which performs a change in the value of the pointer tending to zero.

[0007] Во втором аспекте настоящего изобретения предложен реализуемый компьютером способ управления чтением из разделяемого ресурса памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти, причем способ содержит этапы, на которых: - принимают запрос на чтение упомянутого разделяемого ресурса памяти от читателя; - считывают текущее значение указателя; - определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись: -- в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - осуществляют попытку захватить мьютекс на чтение посредством выполнения атомарной операции CAS над текущим значением указателя: --- в случае неуспешного выполнения операции CAS, осуществляют возврат на этап считывания текущего значения указателя, в противном случае - выполняют стремящееся от нуля изменение значения указателя, - осуществляют операцию чтения из разделяемого ресурса памяти, - освобождают мьютекс на чтение посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.[0007] A second aspect of the present invention provides a computer-implemented method for controlling reading from a shared memory resource in a read-priority system in which concurrent reading from a shared memory resource by multiple readers is permitted and writing to the shared memory resource is permitted by a single writer under the condition of no operations. reading from a shared memory resource, the method comprising the steps of: receiving a request to read said shared memory resource from a reader; - read the current value of the pointer; - determine whether the current pointer value has the first character, which indicates the presence of a write request: - if it is determined that the current pointer value has the first character, return to the stage of reading the current pointer value, otherwise - attempt to seize the mutex on reading by performing an atomic CAS operation on the current pointer value: --- if the CAS operation is unsuccessful, return to the stage of reading the current pointer value, otherwise - perform a change in the pointer value tending from zero, - perform a read operation from a shared memory resource , - release the mutex for reading by performing an atomic CAS operation on the current pointer value, in which a change in the pointer value tends to zero is performed.

[0008] Любой из первого и второго аспектов настоящего раскрытия может развиваться следующими дополнительными одним или более признаками: по меньшей мере часть незавершенных операций чтения выполняется параллельно; первым знаком является знак отрицательного числа или знак положительного числа; число, на величину которого выполняют стремящееся от нуля изменение значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение значения указателя, равны; упомянутым целым числом является 1; читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи; разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является HDD, SSD или NVMe.[0008] Any of the first and second aspects of the present disclosure may be further developed by one or more of the following features: at least a portion of the pending read operations are performed in parallel; the first sign is the sign of a negative number or the sign of a positive number; the number by the value of which the value of the pointer is changed tending from zero, and the number by the value of which the value of the pointer is changed tending to zero, are equal; said integer is 1; a reader is a reader or a reading thread, and a writer is a writer or a writing thread; the shared memory resource is at least a memory cell, where the memory is an HDD, SSD or NVMe.

[0009] В третьем аспекте настоящего раскрытия предложен реализуемый компьютером способ управления чтением из разделяемого ресурса памяти множеством читателей или записью в него (единственным в единицу времени активным) писателем на основе указателя, причем способ содержит этапы, на которых: - при возникновении запроса на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, осуществляют попытку захватить, соответственно, мьютекс на чтение и/или мьютекс на запись, выполняя операцию CAS над текущим значением указателя, при этом при успешном выполнении операции CAS выполняют стремящееся от нуля изменение значения указателя, причем, если упомянутый запрос, для которого успешно выполнена операция CAS, является запросом на запись, то дополнительно устанавливают знаком измененного значения упомянутого указателя первый знак, - для каждого запроса проверяют значение упомянутого указателя со знаком и -- если проверенное значение упомянутого указателя со знаком равно предопределенному значению, осуществляют запись в разделяемый ресурс памяти согласно запросу на запись от писателя, -- если проверенное значение упомянутого указателя со знаком отлично от упомянутого предопределенного значения, осуществляют чтение из разделяемого ресурса памяти согласно запросу на чтение от читателя, - после завершения операции записи или чтения освобождают, соответственно, мьютекс на чтение или мьютекс на запись, выполняя операцию CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.[0009] A third aspect of the present disclosure provides a computer-implemented method for controlling reading from or writing to a shared memory resource by a plurality of readers (the only one active at a time) by a pointer-based writer, the method comprising the steps of: - when a read request occurs shared memory resource or to write to a shared memory resource, they attempt to seize, respectively, a mutex for reading and/or a mutex for writing, performing a CAS operation on the current pointer value, and upon successful completion of the CAS operation, a change in the value of the pointer is performed, tending from zero, moreover, if said request, for which the CAS operation was successfully completed, is a write request, then additionally set the first character to the changed value of said pointer, - for each request, the value of said signed pointer is checked, and - if the checked value of said signed pointer is equal to predefined value, write to the shared memory resource according to a write request from the writer, - if the verified value of said signed pointer is different from said predefined value, read from the shared memory resource according to a read request from the reader, - after the write operation is completed, or reads release, respectively, a read mutex or a write mutex, performing a CAS operation on the current pointer value, in which a change in the pointer value tends to zero is performed.

[0010] Третий аспект настоящего раскрытия может развиваться следующими дополнительными одним или более признаками: первым знаком является знак отрицательного числа или знак положительного числа; число, на величину которого выполняют стремящееся от нуля изменение значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение значения указателя, равны; упомянутым целым числом является 1; упомянутым предопределенным значением указателя со знаком является ‘-1’; читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи; разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является HDD, SSD или энергонезависимая экспресс-память NVMe; абсолютное значение указателя указывает общее количество запросов, подлежащих выполнению, а наличие у значения указателя первого знака указывает наличие запроса на запись.[0010] The third aspect of the present disclosure may be further developed by one or more of the following features: the first sign is a negative number sign or a positive number sign; the number by the value of which the value of the pointer is changed tending from zero, and the number by the value of which the value of the pointer is changed tending to zero, are equal; said integer is 1; said predefined signed pointer value is '-1'; a reader is a reader or a reading thread, and a writer is a writer or a writing thread; the shared memory resource is at least a memory cell, the memory being an HDD, SSD or NVMe non-volatile express memory; the absolute value of the pointer indicates the total number of requests to be executed, and the presence of the first character of the pointer value indicates the presence of a write request.

[0011] В четвертом аспекте настоящего раскрытия предложена система управления чтением-записью разделяемого ресурса памяти, содержащая устройство управления чтением-записью, упомянутый разделяемый ресурс памяти, связанный с упомянутым устройством управления чтением-записью, множество читателей и одного или более писателей (но в единицу времени активным может быть только единственный писатель), причем устройство содержит процессор и память, хранящую исполняемые процессором инструкции, причем, при получении запроса на чтение разделяемого ресурса памяти от одного или более из множества читателей или на запись в разделяемый ресурс памяти от одного или более писателей, процессор выполнен с возможностью осуществления, посредством исполнения упомянутых исполняемых процессором инструкций, (i) способа согласно первому аспекту настоящего раскрытия или любому дополнительному развитию этого первого аспекта, (ii) способа согласно второму аспекту настоящего раскрытия или любому дополнительному развитию этого второго аспекта или (iii) способа согласно третьему аспекту настоящего раскрытия или любому дополнительному развитию этого третьего аспекта.[0011] In a fourth aspect of the present disclosure, a shared memory resource read-write control system is provided, comprising a read-write control device, said shared memory resource associated with said read-write control device, a plurality of readers and one or more writers (but per unit only a single writer can be active at a time), and the device contains a processor and a memory storing instructions executable by the processor, and upon receiving a request to read a shared memory resource from one or more of a plurality of readers or to write to a shared memory resource from one or more writers , the processor is configured to implement, by executing said processor-executable instructions, (i) a method according to a first aspect of the present disclosure or any further development of this first aspect, (ii) a method according to a second aspect of this disclosure or any further development of this second aspect, or (iii) ) the method according to the third aspect of the present disclosure or any further development of this third aspect.

[0012] Четвертый аспект настоящего раскрытия может развиваться следующими дополнительными одним или более признаками: разделяемый ресурс памяти является внутренним разделяемым ресурсом памяти, содержащимся в памяти упомянутого устройства, или внешним разделяемым ресурсом памяти, который доступен упомянутому устройству и с которым упомянутое устройство выполнено с возможностью осуществления проводной и/или беспроводной связи.[0012] The fourth aspect of the present disclosure may be further developed by one or more of the following features: the shared memory resource is an internal shared memory resource contained in the memory of said device, or an external shared memory resource that is accessible by said device and with which said device is configured to implement wired and/or wireless communications.

[0013] В пятом аспекте настоящего раскрытия предложен считываемый компьютером носитель, хранящий исполняемые компьютером инструкции, которые, при получении запросов на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, побуждают компьютер к выполнению, посредством исполнения упомянутых исполняемых компьютером инструкций, (i) способа согласно первому аспекту настоящего раскрытия или любому дополнительному развитию этого первого аспекта, (ii) способа согласно второму аспекту настоящего раскрытия или любому дополнительному развитию этого второго аспекта или (iii) способа согласно третьему аспекту настоящего раскрытия или любому дополнительному развитию этого третьего аспекта.[0013] A fifth aspect of the present disclosure provides a computer-readable medium storing computer-executable instructions that, upon receiving requests to read a shared memory resource or write to a shared memory resource, cause the computer to execute, by executing said computer-executable instructions, (i ) a method according to the first aspect of this disclosure or any further development of this first aspect, (ii) a method according to the second aspect of this disclosure or any further development of this second aspect, or (iii) a method according to the third aspect of this disclosure or any further development of this third aspect.

Краткое описание чертежейBrief description of drawings

[0014] Упомянутые выше и другие аспекты настоящей технологии далее будут описаны подробно со ссылками на графические материалы, на которых:[0014] The above and other aspects of the present technology will now be described in detail with reference to graphics in which:

[ФИГ. 1] Фиг. 1 иллюстрирует блок-схему последовательности операций способа управления записью в разделяемый ресурс памяти согласно первому аспекту настоящего раскрытия.[FIG. 1] Fig. 1 illustrates a flowchart of a method for controlling writing to a shared memory resource according to the first aspect of the present disclosure.

[ФИГ. 2] Фиг. 2 иллюстрирует блок-схему последовательности операций способа управления чтением из разделяемого ресурса памяти согласно второму аспекту настоящего раскрытия.[FIG. 2] Fig. 2 illustrates a flowchart of a method for controlling reading from a shared memory resource according to a second aspect of the present disclosure.

[ФИГ. 3] Фиг. 3 иллюстрирует временную диаграмму, показывающую неограничивающий пример последовательности возможных изменений значения указателя (v) со знаком при реализации любого из раскрытых здесь способов.[FIG. 3] Fig. 3 illustrates a timing diagram showing a non-limiting example of the sequence of possible changes to the value of a signed pointer (v) when implementing any of the methods disclosed herein.

[ФИГ. 4] Фиг. 4 иллюстрирует схематичное представление системы управления чтением-записью разделяемого ресурса памяти, которая выполнена с возможностью реализации любого из раскрытых здесь способов.[FIG. 4] Fig. 4 illustrates a schematic representation of a shared memory resource read-write control system that is configured to implement any of the methods disclosed herein.

Подробное описание вариантов осуществленияDetailed Description of Embodiments

[0015] Раскрытая технология и использующие ее технические решения относятся к технологиям разделения доступа к общим ресурсам в системе с параллельными вычислениями. В таких системах обычно требуется распределять права доступа и очередность доступа к данным. Под “доступом к данным” понимается возможность обращаться к памяти или дисковому хранилищу, например конкретному HDD, SSD, NVMe, или к минимальной адресуемой единице памяти (например к ячейке памяти), или к минимальной адресуемой единице информации (например к байту), для чтения и/или записи данных. Тогда возникает задача быстрого и отказоустойчивого распределения таких доступов между писателями и читателями. Под термином “писатель” здесь понимается любой аппаратный или программный объект или сущность, которым доступна память или и с которой они могут взаимодействовать для записи в эту память любых данных, неограничивающие примеры “писателя” включают в себя устройство-писатель или поток записи. Под термином “читатель” здесь понимается любой аппаратный или программный объект или сущность, которым доступна память или и с которой они могут взаимодействовать для чтения хранящихся в этой памяти любых данных, неограничивающие примеры “читателя” включают в себя устройство-читатель или поток чтения.[0015] The disclosed technology and technical solutions using it relate to technologies for sharing access to shared resources in a parallel computing system. In such systems, it is usually necessary to distribute access rights and the priority of access to data. “Data access” refers to the ability to access memory or disk storage, such as a specific HDD, SSD, NVMe, or the minimum addressable unit of memory (for example, a memory cell), or the minimum addressable unit of information (for example, a byte), for reading and/or data recording. Then the problem arises of fast and fault-tolerant distribution of such accesses between writers and readers. The term “writer” as used herein means any hardware or software object or entity that can access or interact with memory to write any data to that memory, non-limiting examples of “writer” include a writer device or a writer stream. The term “reader” as used herein means any hardware or software object or entity that can access or interact with memory to read any data stored in that memory, non-limiting examples of “reader” include a reader device or a reader thread.

[0016] Класс задач требует обеспечить распределения доступов между писателями и читателями. Важно, чтобы процессы записи и чтения не конфликтовали, иначе возникают ошибки в самих данных. Существуют разные парадигмы по количеству и приоритету писателей и читателей в системе. Варианты осуществления настоящей заявки главным образом относятся к системе с одним писателем и множественными читателями, в которой приоритет отдается читателям. Фразу “в системе имеется один писатель” здесь и везде в этой заявке следует понимать так, что в определенный момент времени в системе имеется только один активный писатель, которому разрешено выполнять запись, а не так, что в системе есть всего один писатель, например единственное устройство-писатель.[0016] A class of tasks requires the distribution of access between writers and readers. It is important that the writing and reading processes do not conflict, otherwise errors will occur in the data itself. There are different paradigms regarding the number and priority of writers and readers in the system. Embodiments of the present application primarily relate to a single writer, multiple reader system in which priority is given to readers. The phrase “the system has one writer” here and elsewhere in this application should be understood to mean that at a given time there is only one active writer on the system who is allowed to write, and not that there is only one writer on the system, such as a single writer device.

[0017] В такой парадигме сервер может выступать единой точкой входа для приема, обработки и сохранения данных. Например, без ограничения упомянутым, таким сервером может быть сервер для хранения данных поездок сервиса Яндекс.Такси или для хранения и обработки данных о товарах Яндекс.Маркета. Клиентами (т.е. потребителями данных), в свою очередь, выступают пользовательские устройства, терминалы, которые обращаются на упомянутый сервер для получения интересующих их данных. Снижение конфликтов в таких случаях является крайне важным для получения всеми клиентами согласованной (на определенный момент времени) информации, например одной цены на товар, если говорим про Яндекс.Маркет, или, например, для учёта-расчёта маршрутов поездок в Яндекс.Такси.[0017] In such a paradigm, the server can act as a single entry point for receiving, processing and storing data. For example, without limiting the above, such a server may be a server for storing trip data for the Yandex.Taxi service or for storing and processing data about Yandex.Market products. Clients (i.e. data consumers), in turn, are user devices and terminals that contact the mentioned server to obtain the data they are interested in. Reducing conflicts in such cases is extremely important for all clients to receive agreed (at a certain point in time) information, for example, one price for a product, if we are talking about Yandex.Market, or, for example, for accounting and calculating travel routes in Yandex.Taxi.

[0018] Раскрытая технология позволяет оптимизировать хранение и доступы к разделяемым (общим) ресурсам памяти в системе с параллельными вычислениями, например, к кеширующей библиотеке с высокой конкурентностью. То есть, в этом неограничивающем примере, доступ к кэшу памяти, куда сохраняются «популярные» запросы клиентов. Раскрытая технология предлагает способ управления чтением-записью (и, следовательно, захватом-освобождением мьютекса на чтение-запись) с помощью одного указателя со знаком, который может быть установлен для указания наличия запроса на запись от писателя в очереди обрабатываемых запросов. Таким образом, используя предлагаемые здесь способы и другие технические решения, реализующие эти способы, избежать конфликтов обращения к данным, когда данные одновременно пишутся в разделяемый ресурс памяти и читаются из него.[0018] The disclosed technology allows optimization of storage and access to shared (common) memory resources in a parallel computing system, for example, to a highly concurrent caching library. That is, in this non-limiting example, access to the memory cache where "popular" client requests are stored. The disclosed technology provides a method for controlling read-write (and hence acquisition-release of a read-write mutex) using a single signed pointer that can be set to indicate the presence of a write request from a writer in the queue of requests being processed. Thus, using the methods proposed here and other technical solutions that implement these methods, avoid data access conflicts when data is simultaneously written to and read from a shared memory resource.

[0019] Несмотря на вышесказанное, в частности на то, что варианты осуществления настоящей заявки главным образом относятся к парадигме с одним писателем и множественными читателями, в которой приоритет отдается читателям, обычному специалисту, после ознакомления с материалами данной заявки, не составит труда модифицировать раскрытые варианты осуществления, не прикладывая каких-либо изобретательских усилий, на работу в парадигме с одним читателем и множественными писателями, в которой приоритет отдается писателям, или даже на работу в парадигме с одним читателем и множественными писателями, в которой приоритет отдается читателю. Предполагается, что такие варианты осуществления, хоть подробно и не описаны в данном описании, явным образом следуют из данного описания для обычного специалиста в данной области.[0019] Notwithstanding the foregoing, in particular that embodiments of the present application primarily relate to a single writer, multiple reader paradigm in which priority is given to readers, one of ordinary skill in the art, having become familiar with the materials herein, would have no difficulty in modifying the disclosures. embodiments, without exerting any inventive effort, to operate in a single-reader, multiple-writers paradigm in which the writers are prioritized, or even to operate in a single-reader, multiple-writers paradigm in which the reader is prioritized. It is intended that such embodiments, although not described in detail herein, will be readily apparent from the specification to one of ordinary skill in the art.

[0020] В информатике читатели-писатель (Readers-Writer, RW) - это примитив синхронизации, который решает одну из проблем RW. Блокировка RW или, по меньшей мере в некоторых контекстах - мьютекс (mutex, от “mutual exclusion” - взаимное исключение), обеспечивает возможность одновременного (параллельного для предопределенного числа читателей) доступа к разделяемому ресурсу памяти только для его чтения, в то время как операции записи в этот разделяемый ресурс памяти требуют эксклюзивного доступа. Это означает, что несколько потоков могут считывать данные параллельно, но для записи или изменения данных необходима эксклюзивная блокировка. Когда писатель записывает данные, все остальные писатели и читатели будут заблокированы до тех пор, пока писатель не закончит запись. Обычным применением данной блокировки может быть управление доступом к ресурсу памяти (например структуре данных в памяти), который не может быть обновлен атомарно и является недопустимым (и не должен быть прочитан другим потоком) до завершения его обновления. “Атомарная” операция относится к простой и быстрой операции с ресурсом памяти, которая не может быть прервана параллельными операциями. Можно сказать, что блокировка или мьютекс в раскрытой здесь системе (в основной парадигме с приоритетом читателей) обеспечивает исключительную операцию записи, при которой только один писатель может изменять данные в определенное время (например во временном интервале t4-t5, проиллюстрированном на Фиг. 3). В то время как в этой же системе может быть несколько читателей, осуществляющих чтение данных из одного разделяемого ресурса памяти параллельно (см., например, временной интервал t1-t3, проиллюстрированный на Фиг. 3, во время которого данные из одного разделяемого ресурса памяти параллельно считываются читателями 500a и 500b). Основная парадигма, на работу с которой главным образом нацелены технические решения, раскрываемые в данной заявке, подходит для систем, в которых запись выполняется нечасто, а производительность операций чтения является более важной.[0020] In computer science, Readers-Writer (RW) is a synchronization primitive that solves one of the RW problems. An RW lock, or at least in some contexts a mutex (from “mutual exclusion” ), allows simultaneous (parallel for a predetermined number of readers) read-only access to a shared memory resource while operations writes to this shared memory resource require exclusive access. This means that multiple threads can read data in parallel, but an exclusive lock is required to write or modify data. When a writer writes data, all other writers and readers will be blocked until the writer finishes writing. A common use of this lock would be to control access to a memory resource (such as an in-memory data structure) that cannot be updated atomically and is invalid (and should not be read by another thread) until its update is complete. An “atomic” operation refers to a simple and fast operation on a memory resource that cannot be interrupted by concurrent operations. A lock or mutex in the system disclosed here (in the basic reader-first paradigm) can be said to provide an exclusive write operation in which only one writer can modify data at a particular time (for example, in the time interval t 4 -t 5 illustrated in FIG. 3). While in the same system there may be several readers reading data from one shared memory resource in parallel (see, for example, the time interval t 1 -t 3 illustrated in Fig. 3, during which data from one shared resource memories are read in parallel by readers 500a and 500b). The basic paradigm that the technical solutions disclosed herein are primarily aimed at is suitable for systems in which writes are performed infrequently and read performance is more important.

[0021] На Фиг. 1 иллюстрируется блок-схема последовательности операций способа управления записью в разделяемый ресурс памяти согласно первому аспекту настоящего раскрытия. Данный способ реализуется в системе с приоритетом на чтение, в которой, как указано выше, разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти. Способ начинается с этапа S100, на котором принимают запрос на запись в разделяемый ресурс памяти от писателя. Данные, запись которых запрашивается запросом на запись, могут изначально содержаться в запросе на запись или передаваться только тогда, когда выполнение данного запроса будет разрешено. Прием запроса на запись может быть осуществлен любым способом, например, через проводную связь или беспроводную связь между соответствующим писателем и устройством 300 или иным компонентом управления чтением-записью, или через программный вызов потока записи в определенной среде исполнения. В запросе на запись указывается конкретный разделяемый ресурс памяти и/или его область, указываемые, например, в поле ‘адрес’ запроса, куда данные необходимо записать.[0021] In FIG. 1 illustrates a flowchart of a method for controlling writing to a shared memory resource according to a first aspect of the present disclosure. This method is implemented in a read-priority system, in which, as stated above, parallel reading from a shared memory resource by multiple readers is allowed, and writing to a shared memory resource is allowed by a single writer, provided there are no read operations from the shared memory resource. The method begins at step S100, which receives a request to write to the shared memory resource from a writer. The data requested to be recorded by a write request may be initially contained in the write request or transferred only when the request is allowed to execute. Reception of a write request may be accomplished in any manner, such as through a wired or wireless link between the associated writer and the device 300 or other read-write control component, or through a programmatic call to the write thread in a particular execution environment. A write request specifies a specific shared memory resource and/or its area, indicated, for example, in the ‘address’ field of the request, where the data needs to be written.

[0022] Как только запрос на запись принят на этапе S100, способ переходит на этап S105, на котором считывают текущее значение указателя, связанного с разделяемым ресурсом памяти, указанным в запросе на запись. Под термином “указатель” в данном документе понимается адрес ячейки в памяти, хранящей считываемое значение, которое в предпочтительном, но не ограничивающем варианте осуществления является целым числом. То, что “указатель связан с разделяемым ресурсом памяти”, означает, что конкретный указатель используется для управления доступами к конкретному разделяемому ресурсу памяти. Таким образом, должно быть понятно, что для управления доступами к множеству разделяемых ресурсов памяти может использоваться соответствующее множество указателей. Текущее значение самого указателя может храниться в любом месте, например, в самом разделяемом ресурсе памяти или в любой другой памяти (например, в кэше или регистре процессора, буфере и т. д.) или области памяти, доступ к которой может быть осуществлен на этапе S105. Значение указателя указывает общее количество имеющихся в очереди запросов (в том числе на запись и на чтение), подлежащих выполнению, и то, имеется ли среди упомянутых запросов именно запрос на запись (сигнализируется наличием или отсутствием определенного знака, т.е. первого знака, что подробно описано далее).[0022] Once the write request is received in step S100, the method proceeds to step S105, in which the current value of the pointer associated with the shared memory resource specified in the write request is read. The term “pointer ” as used herein refers to the address of a memory location storing a read value, which in a preferred but non-limiting embodiment is an integer. The fact that “a pointer is associated with a shared memory resource” means that a particular pointer is used to control accesses to a particular shared memory resource. Thus, it will be appreciated that a corresponding set of pointers may be used to control accesses to multiple shared memory resources. The current value of the pointer itself can be stored anywhere, such as in the shared memory resource itself, or in any other memory (such as a processor cache or register, buffer, etc.) or memory region that can be accessed in step S105. The pointer value indicates the total number of requests in the queue (including write and read) to be executed, and whether among these requests there is a write request (signaled by the presence or absence of a certain character, i.e. the first character, which is described in detail below).

[0023] После выполнения на этапе S105 считывания текущего значения указателя способ переходит на этап S110, на котором определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись. В неограничивающих вариантах реализации данного этапа знак можно определить по значению знакового бита в двоичном представлении текущего значения указателя со знаком или путем сравнения с нулем считаного текущего значения указателя со знаком. Неограничивающим способом представления текущего значения указателя может быть дополнительный код ("two’s complement"). В предпочтительном варианте осуществления первым знаком является знак минус (-), т.е. знак отрицательного числа. Тем не менее, в другом варианте осуществления первым знаком может быть знак плюс (+), т.е. знак положительного числа. В упомянутом выше другом варианте осуществления знак плюс может дополнительно явным образом не сигнализироваться, а выводиться логически, если типом переменной указателя является, например, тип ‘unsigned int’. В этом случае диапазон значений, которые значение указателя может принимать, может быть расширен, поскольку бит, который использовался бы в качестве знакового бита, используется (в этом случае с типом переменной ‘unsigned int’) для представления самого числа.[0023] After reading the current pointer value in step S105, the method proceeds to step S110, in which it is determined whether the current pointer value has a first character that indicates the presence of a write request. In non-limiting embodiments of this step, the sign may be determined from the value of the sign bit in the binary representation of the current signed pointer value or by comparing the read current signed pointer value to zero. A non-restrictive way to represent the current value of a pointer can be in complementary code ( "two's complement" ). In the preferred embodiment, the first character is a minus sign (-), i.e. negative number sign. However, in another embodiment, the first sign may be a plus sign (+), i.e. positive number sign. In the other embodiment mentioned above, the plus sign may additionally not be explicitly signaled, but inferred logically if the type of the pointer variable is, for example, an 'unsigned int' type. In this case, the range of values that the pointer value can take can be expanded because the bit that would be used as the sign bit is used (in this case with the variable type 'unsigned int') to represent the number itself.

[0024] Неограничивающие примеры значений указателя, когда первым знаком является знак минус, включают в себя: 0 (отсутствуют какие-либо запросы), 1 (имеется один запрос на чтение), 2 (имеется два запроса на чтение), 3 (имеется три запроса на чтение), -2 (имеется всего два запроса, одним из которых является запрос на запись, а другим - запрос на чтение), -3 (имеется всего три запроса, одним из которых является запрос на запись, а двумя другими - запросы на чтение) и т. д. Неограничивающие примеры значений указателя, когда первым знаком является знак плюс, включают в себя: 0 (отсутствуют какие-либо запросы), -1 (имеется один запрос на чтение), -2 (имеется два запроса на чтение), -3 (имеется три запроса на чтение), 2 (имеется всего два запроса, одним из которых является запрос на запись, а другим - запрос на чтение), 3 (имеется всего три запроса, одним из которых является запрос на запись, а двумя другими - запросы на чтение) и т. д.[0024] Non-limiting examples of pointer values when the first character is a minus sign include: 0 (no read requests), 1 (one read request), 2 (two read requests), 3 (three read request), -2 (there are only two requests, one of which is a write request, and the other is a read request), -3 (there are only three requests, one of which is a write request, and the other two are requests read), etc. Non-limiting examples of pointer values when the first character is a plus sign include: 0 (no read requests), -1 (one read request), -2 (two read requests). read), -3 (there are three read requests), 2 (there are only two requests, one of which is a write request and the other is a read request), 3 (there are only three requests, one of which is a write request , and the other two are read requests), etc.

[0025] В случае определения на этапе S110, что текущее значение указателя имеет первый знак (например считаным значением является значение -2), осуществляют возврат на этап S105, поскольку это говорит о том, что среди запросов в данный момент уже есть запрос на запись, поэтому данный запрос на запись, который был принят на этапе S100, не может быть поставлен в очередь запросов и выполнен до тех пор, пока не будет выполнен уже имеющийся в очереди запросов запрос на запись. Как указано выше, одновременная запись в один разделяемый ресурс памяти или одновременное с записью чтение одного разделяемого ресурса памяти может привести к состояниям гонок данных со сложно предсказуемым поведением, что в конечном счёте может привести к ошибкам в данных этого разделяемого ресурса памяти, поэтому выполнение данного этапа S110 оценки знака текущего значения лишь одного указателя является технически выгодным, поскольку позволяет избежать таких состояний при минимальном расходе ресурсов (например памяти) за счет обработки единственного указателя.[0025] If it is determined in step S110 that the current value of the pointer has a first digit (for example, the read value is the value -2), it is returned to step S105, since this indicates that there is already a write request among the requests at the moment , therefore, this write request that was received in step S100 cannot be put into the request queue and executed until the write request already in the request queue is executed. As stated above, simultaneous writing to a single shared memory resource or simultaneous reading of a single shared memory resource can lead to data race conditions with difficult to predict behavior, which can ultimately lead to errors in the data of that shared memory resource, so performing this step S110 of evaluating the sign of the current value of only one pointer is technically advantageous because it avoids such conditions with minimal consumption of resources (eg memory) by processing a single pointer.

[0026] В случае определения на этапе S110, что текущее значение указателя не имеет первый знак (например считаным значением является значение 0) или имеет второй знак (например считаным значением является значение 2, как показано для временного интервала от t1 до t2 на Фиг. 3, что означает (из-за наличия второго знака), что среди запросов в данный момент запроса на запись нет) - способ переходит на этап S115, на котором осуществляют попытку захватить мьютекс для записи в упомянутый разделяемый ресурс памяти посредством выполнения атомарной операции CAS над текущим значением указателя, связанного с разделяемым ресурсом памяти. В целом, суть операции CAS сводится к атомарному выполнению проверки, соответствует ли текущее значение переменной в памяти ожидаемому значению этой переменной, и если да (т.е. считанные значения равны), замены текущего значения переменной новым значением этой переменной. Неограничивающие примеры атомарных инструкций, выполняющих операции CAS, включают в себя, для архитектур процессоров x86, атомарные инструкции CMPXCHG, CMPXCHG8B, CMPXCHG16B. Сама по себе операция CAS из уровня техники известна, поэтому ее более подробное описание здесь не приводится.[0026] In the case of determining in step S110 that the current pointer value does not have a first character (for example, the read value is the value 0) or has a second character (for example, the read value is the value 2, as shown for the time interval t 1 to t 2 in Fig. 3, which means (due to the presence of the second character) that there is currently no write request among the requests) - the method proceeds to step S115, in which an attempt is made to acquire a mutex for writing to said shared memory resource by performing an atomic operation CAS over the current value of the pointer associated with the shared memory resource. In general, the essence of a CAS operation is to atomically check whether the current value of a variable in memory matches the expected value of that variable, and if so (i.e., the read values are equal), replacing the current value of the variable with the new value of that variable. Non-limiting examples of atomic instructions that perform CAS operations include, for x86 processor architectures, atomic instructions CMPXCHG, CMPXCHG8B, CMPXCHG16B. The CAS operation itself is known from the prior art, so its more detailed description is not given here.

[0027] В случае неуспешного выполнения операции CAS на этапе S115, осуществляют возврат на этап S105. В этом случае всю последовательность этапов, начиная с этапа S105, выполняют повторно до тех пор, пока для принятого на этапе S100 запроса на запись не будет успешно захвачен мьютекс для записи в упомянутый разделяемый ресурс памяти. В противном случае, т.е. когда на этапе S115 операция CAS выполняется успешно, способ переходит к выполнению этапа S120, на котором выполняют стремящееся от нуля изменение значения указателя, и этапа S125, на котором устанавливают знаком измененного значения указателя упомянутый первый знак, указывающий наличие в очереди запросов, подлежащих выполнению, того запроса на запись, который был принят на этапе S100. После успешного изменения значения указателя и установки знаком измененного значения указателя упомянутого первого знака мьютекс на запись для запроса на запись, который был принят на этапе S100, является захваченным.[0027] If the CAS operation in step S115 is unsuccessful, it returns to step S105. In this case, the entire sequence of steps starting from step S105 is repeated until the write request received in step S100 successfully acquires a mutex for writing to said shared memory resource. Otherwise, i.e. when the CAS operation is successful in step S115, the method proceeds to executing step S120, in which a zero-based change in the pointer value is performed, and step S125, in which the sign of the changed pointer value is set to the first sign indicating the presence of requests in the queue to be executed, that write request that was received in step S100. After successfully changing the pointer value and setting the sign of the changed pointer value of said first sign, the write mutex for the write request that was received in step S100 is captured.

[0028] В предпочтительном варианте реализации начальное значение указателя v может быть инициализировано равным нулю, т.е. v0=v(0), а число, на величину которого на этапе S120 выполняют стремящееся от нуля изменение значения указателя v, может равняться 1. Тем не мерее, должно быть понятно, что число, на величину которого выполняют стремящееся от нуля изменение значения указателя v на этапе S120, может быть больше 1, например, 2, 3 или большее число (в этом случае общее число запросов в очереди запросов может быть определено по значению такого указателя как текущее значение указателя, деленное, соответственно, на 2, 3 или большее число).[0028] In a preferred embodiment, the initial value of the pointer v may be initialized to zero, i.e. v 0 =v(0), and the number by which the value of the pointer v is changed from zero in step S120 may be 1. However, it should be clear that the number by which the value is changed from zero by pointer v in step S120 may be greater than 1, such as 2, 3, or a greater number (in which case, the total number of requests in the request queue can be determined from the value of such pointer as the current pointer value divided by 2, 3, or greater number).

[0029] Сутью “стремящегося от нуля изменения значения указателя v” является такое изменение текущего значения указателя v при котором, вне зависимости от текущего знака текущего значения указателя v, измененное значение является значением, которое находится дальше от нуля, чем значение до изменения, на величину определенного, в предпочтительном варианте - целого, числа (например, на единицу (1) дальше). Для иллюстрации, а не ограничения, если текущим значением указателя v является значение 1, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет 2, если текущим значением указателя v является значение -1, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет -2, если текущим значением указателя v является значение 2, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет 3, если текущим значением указателя v является значение -2, тогда результатом стремящегося от нуля изменения значения указателя v на единицу будет -3 и т. д. Как указано выше, число, на величину которого выполняют стремящееся от нуля изменение значения указателя v на этапе S120 может быть больше единицы. Неограничивающие примеры реализации стремящегося от нуля изменения значения указателя v показаны с левой стороны на Фиг. 3, которая будет описана ниже по тексту данного описания.[0029] The essence of a “zero-based change in the value of the pointer v” is such a change in the current value of the pointer v such that, regardless of the current sign of the current value of the pointer v, the changed value is a value that is further from zero than the value before the change, by the value of a certain, preferably integer, number (for example, one (1) further). By way of illustration and not limitation, if the current value of the pointer v is the value 1, then the result of a zero-based change in the value of the pointer v by one is 2, if the current value of the pointer v is the value -1, then the result of a non-zero change in the value of the pointer v by one will be -2, if the current value of the pointer v is the value 2, then the result of a zero-based change in the value of the pointer v by one will be 3, if the current value of the pointer v is the value -2, then the result of a zero-based change in the value of the pointer v by one will be -3, etc. As stated above, the number by which the value of the pointer v is changed toward zero in step S120 may be greater than one. Non-limiting examples of the implementation of a change in the value of the pointer v tending from zero are shown on the left side in Fig. 3, which will be described below in the text of this description.

[0030] Неограничивающим примером реализации этапа S125 установки знаком измененного значения указателя упомянутый первый знак является умножение измененного значения указателя на -1. В неограничивающем примере реализации, показанном на Фиг. 3, когда в качестве первого знака используется знак минус, значение v2 указателя в момент t2 времени может быть получено как v2=(v1(2)+1)×(-1)=-3. Таким образом общей формулой выполнения изменения значения и установки первого знака на этапах S120 и S125 в упомянутом неограничивающем примере реализации будет vi=(vi-1+1)×(-1).[0030] A non-limiting example of implementing step S125 of setting the sign of the changed pointer value of said first sign is to multiply the changed pointer value by -1. In a non-limiting example implementation shown in FIG. 3, when the minus sign is used as the first sign, the value v 2 of the pointer at time t 2 can be obtained as v 2 =(v 1 (2)+1)×(-1)=-3. Thus, the general formula for performing the value change and setting the first character in steps S120 and S125 in the above-mentioned non-limiting example implementation is v i =(v i-1 +1)×(-1).

[0031] В другом неограничивающем примере (не показанном на фигуре), когда в качестве первого знака используется знак плюс (соответственно значение v1, показанное на Фиг. 3, как равное 2, будет равняться в этом другом неограничивающем примере -2), значение v2 указателя в момент t2 времени может быть получено как v2=(v1(-2)-1)×(-1)=3. Таким образом общей формулой выполнения изменения значения и установки первого знака на этапах S120 и S125 в этом другом неограничивающем примере реализации будет vi=(vi-1-1)×(-1). Еще в одной альтернативе изменение значения и установка первого знака на этапах S120 и S125 (в варианте, в котором в качестве первого знака используется знак плюс, как указано выше), может быть выполнено как v2=|v1(-2)|+1=3, где | | указывает модуль или абсолютное значение. Таким образом общей формулой выполнения изменения значения и установки первого знака на этапах S120 и S125 в этой альтернативе будет vi=|vi-1|+1.[0031] In another non-limiting example (not shown in the figure), when a plus sign is used as the first sign (accordingly, the value of v 1 shown in Fig. 3 as equal to 2 would be equal to -2 in this other non-limiting example), the value v 2 pointers at time t 2 can be obtained as v 2 =(v 1 (-2)-1)×(-1)=3. Thus, the general formula for performing the value change and setting the first character in steps S120 and S125 in this other non-limiting implementation example is v i =(v i-1 -1)×(-1). In yet another alternative, changing the value and setting the first sign in steps S120 and S125 (in the embodiment where the plus sign is used as the first sign as above) can be done as v 2 =|v 1 (-2)|+ 1=3, where | | indicates the modulus or absolute value. Thus, the general formula for performing the value change and setting the first character in steps S120 and S125 in this alternative is v i =|v i-1 |+1.

[0032] После выполнения этапов S120 и S125 способ переходит к выполнению этапа S130, на котором считывают текущее (уже измененное) значение указателя v для определения, имеются ли незавершенные операции чтения из упомянутого разделяемого ресурса памяти, соответствующие одному или более ранее принятым запросам на чтение соответственно от одного или более читателей. Данное определение по сути опирается на оценку текущего (уже измененного) значения указателя v. В качестве неограничивающего примера, в котором единица используется в качестве величины стремящегося от нуля изменения, а в качестве первого знака используется знак минус, данная оценка для момента t2 времени (см. Фиг. 3) может быть проведена следующим образом |v2(-3)|-1=2, где | | указывает модуль или абсолютное значение. Таким образом общей формулой оценки на этапе S130, имеются ли незавершенные операции чтения, в упомянутом неограничивающем примере реализации будет |vcurrent|-1, где vcurrent - текущее (уже измененное на этапе S120) значение указателя. Полученное в этом примере значение 2 говорит о том, что в очереди запросов, помимо запроса на запись от писателя 600, имеются два запроса на чтение, а именно показанные на Фиг. 3 запросы на чтение от читателей 500a, 500b.[0032] After executing steps S120 and S125, the method proceeds to executing step S130, in which the current (already modified) value of the pointer v is read to determine whether there are pending read operations from the shared memory resource corresponding to one or more previously received read requests respectively from one or more readers. This definition essentially relies on evaluating the current (already changed) value of the pointer v. As a non-limiting example, in which one is used as the magnitude of the change tending from zero, and the minus sign is used as the first sign, this estimate for time t 2 (see Fig. 3) can be carried out as follows |v 2 (- 3)|-1=2, where | | indicates the modulus or absolute value. Thus, the general formula for judging in step S130 whether there are pending read operations in the above-mentioned non-limiting example implementation will be |v current |-1, where v current is the current (already modified in step S120) pointer value. The value 2 obtained in this example indicates that in the request queue, in addition to the write request from the writer 600, there are two read requests, namely those shown in FIG. 3 read requests from readers 500a, 500b.

[0033] В другом неограничивающем пример (не показан), в котором единица используется в качестве величины стремящегося от нуля изменения, а в качестве первого знака используется знак плюс, данная оценка для момента t2 времени, в который v2 соответственно равно 3, а не -3 как показано на Фиг. 3, может быть проведена следующим образом v2(3)-1=2. Таким образом общей формулой оценки на этапе S130, имеются ли незавершенные операции чтения, в упомянутом неограничивающем примере реализации будет vcurrent-1, где vcurrent - текущее (уже измененное на этапе S120) значение указателя. Полученное в этом примере значение 2 говорит о том, что в очереди запросов, помимо запроса на запись от писателя 600, имеются два запроса на чтение, а именно показанные на Фиг. 3 запросы на чтение от читателей 500a, 500b.[0033] In another non-limiting example (not shown), in which one is used as the magnitude of the change tending from zero, and the plus sign is used as the first sign, this estimate is for the time t 2 at which v 2 is respectively equal to 3, and not -3 as shown in Fig. 3 can be carried out as follows v 2 (3)-1=2. Thus, the general formula for judging in step S130 whether there are pending read operations in the above-mentioned non-limiting example implementation will be v current -1, where v current is the current (already modified in step S120) pointer value. The value 2 obtained in this example indicates that in the request queue, in addition to the write request from the writer 600, there are two read requests, namely those shown in FIG. 3 read requests from readers 500a, 500b.

[0034] Указанные выше примеры приведены не для ограничения предлагаемого технического решения, а для иллюстрации возможных вариантов реализации стремящегося от нуля изменения S120 значения указателя v, установки S125 соответствующего знака и считывания значения S130 с оценкой, имеются ли незавершенные операции чтения из упомянутого разделяемого ресурса памяти. Таким образом, другие варианты реализации, очевидным образом вытекающие из приведенных выше неограничивающих примеров реализации, могут применяться без отступления от сути и объема предлагаемого технического решения. Предполагается, что все такие варианты и эквиваленты указанных выше признаков охватываются формулой настоящего изобретения.[0034] The above examples are not given to limit the proposed technical solution, but to illustrate possible implementation options for changing the value of the pointer v S120 tending from zero, setting S125 to the corresponding sign and reading the value S130 with an assessment of whether there are pending read operations from the mentioned shared memory resource . Thus, other implementation options, clearly arising from the above non-limiting implementation examples, can be used without departing from the essence and scope of the proposed technical solution. All such variations and equivalents of the above features are intended to be covered by the claims of the present invention.

[0035] В случае, если определено на этапе S130, что незавершенные операции чтения имеются, результатом выполнения операции не является предопределенное число (например: -1, когда в качестве первого знака используется знак минус, а в качестве величины стремящегося от нуля (к нулю) изменения используется единица; 1, когда в качестве первого знака используется знак плюс, а в качестве величины стремящегося от нуля (к нулю) изменения используется единица; -2, когда в качестве первого знака используется знак минус, а в качестве величины стремящегося от нуля (к нулю) изменения используется число два; 2, когда в качестве первого знака используется знак плюс, а в качестве величины стремящегося от нуля (к нулю) изменения используется число два и т.д.), способ переходит на этап S135 ожидания завершения всех незавершенных операций чтения.[0035] In case it is determined in step S130 that there are pending read operations, the result of the operation is not a predetermined number (for example: -1, when the minus sign is used as the first sign and the value tends from zero (towards zero) ) change, one is used; 1, when the plus sign is used as the first sign, and one is used as the magnitude of the change tending from zero (towards zero); -2, when the minus sign is used as the first sign, and as the magnitude tending from zero (to zero) change, the number two is used; 2, when the plus sign is used as the first sign, and the number two is used as the amount of the change tending from zero (to zero), etc.), the method proceeds to step S135 of waiting for completion of all pending read operations.

[0036] В проиллюстрированном на Фиг. 3 неограничивающем примере писатель 600 выполняет ожидание с момента t2 до момента t4 времени, т.е. до тех пор, пока ранее принятые запросы на чтение от читателей 500a, 500b не будут выполнены. Другими словами, ожидание выполняется до тех пор, пока значение выполняемой на этапе S130 операции не станет равно предопределенному значению. В показанном на Фиг. 3 неограничивающем примере предопределенным значением является значение -1, которое устанавливается читателями 500a, 500b и может быть считано писателем 600 в момент t4 времени. В неограничивающем примере реализации ожидания на этапе S135 осуществляется регулярная проверка (один раз в единицу времени) текущего значения указателя до тех пор, пока не будет считано упомянутое предопределенное значение. Считывание на этапе S135 предопределенного значения (в результате, например, регулярной проверки) означает, что в очереди запросов остался лишь запрос на запись от писателя 600, который был ранее принят на этапе S100 и исполнение которого в данный момент (начиная с момента t4 времени) не приведет к нежелательным состояниям разделяемого ресурса памяти и/или ошибкам в данных, хранимых или записываемых в разделяемый ресурс памяти. Далее способ переходит на этап S140.[0036] As illustrated in FIG. 3, as a non-limiting example, writer 600 waits from time t 2 to time t 4 , i.e. until previously accepted read requests from readers 500a, 500b are fulfilled. In other words, waiting is performed until the value of the operation performed in step S130 is equal to the predetermined value. In shown in FIG. 3, a non-limiting example, the predetermined value is -1, which is set by readers 500a, 500b and can be read by writer 600 at time t4 . In a non-limiting implementation example of the wait, in step S135, a regular check (once per unit of time) of the current value of the pointer is performed until the predetermined value is read. Reading a predetermined value at step S135 (as a result of, for example, a regular check) means that only a write request from writer 600 remains in the request queue, which was previously received at step S100 and which is currently being executed (since time t 4 ) will not lead to undesired states of the shared memory resource and/or errors in the data stored or written to the shared memory resource. The method then proceeds to step S140.

[0037] Таким образом, когда определяется на этапе S130 или этапе S135, что незавершенные операции чтения отсутствуют (т.е. значение указателя равно предопределенному значению) способ переходит на этап S140, на котором осуществляют операцию записи в разделяемый ресурс памяти согласно запросу на запись, принятому на этапе S100 от писателя (например писателя 600). Запись может осуществляться любым известным из уровня техники способом. Любые данные, без каких-либо ограничений, могут записываться на данном этапе. После завершения записи способ переходит на этап S145, на котором освобождают мьютекс на запись посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.[0037] Thus, when it is determined in step S130 or step S135 that there are no pending read operations (ie, the value of the pointer is equal to a predetermined value), the method proceeds to step S140, which performs a write operation to the shared memory resource according to the write request received in step S100 from a writer (eg writer 600). The recording can be carried out by any method known from the prior art. Any data, without any restrictions, can be recorded at this stage. After completion of the write, the method proceeds to step S145, in which the write mutex is released by performing an atomic CAS operation on the current pointer value, in which a zero-to-zero change to the pointer value is performed.

[0038] Операция, выполняемая на этапе S145, является по сути обратной по отношению к операции, выполненной ранее на этапе S115. Сутью “стремящегося к нулю изменения значения указателя v” является такое изменение текущего значения указателя v при котором, вне зависимости от текущего знака текущего значения указателя v, измененное значение является значением, которое находится ближе к нулю, чем значение до изменения, на величину определенного, в предпочтительном варианте - целого, числа (например, на единицу (1) ближе). Для иллюстрации, а не ограничения, если текущим значением указателя v является значение 1, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет 0, если текущим значением указателя v является значение -1, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет 0, если текущим значением указателя v является значение 2, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет 1, если текущим значением указателя v является значение -2, тогда результатом стремящегося к нулю изменения значения указателя v на единицу будет -1 и т. д. Как указано выше, число, на величину которого выполняют стремящееся к нулю изменение значения указателя v на этапе S145 может быть больше единицы. Неограничивающие примеры реализации стремящегося к нулю изменения значения указателя v показаны с правой стороны на Фиг. 3.[0038] The operation performed in step S145 is essentially the reverse of the operation performed previously in step S115. The essence of a “change in the value of the pointer v tending to zero” is such a change in the current value of the pointer v in which, regardless of the current sign of the current value of the pointer v, the changed value is a value that is closer to zero than the value before the change, by a certain amount, preferably an integer, a number (for example, one (1) closer). By way of illustration and not limitation, if the current value of the pointer v is the value 1, then the result of a zero-tuning change in the value of the pointer v by one will be 0, if the current value of the pointer v is the value -1, then the result of a zero-going change in the value of the pointer v by one will be 0, if the current value of the pointer v is the value 2, then the result of a zero-tending change in the value of the pointer v by one will be 1, if the current value of the pointer v is the value -2, then the result of a zero-tenant change in the value of the pointer v by one will be - 1, etc. As stated above, the number by which the value of the pointer v is changed toward zero in step S145 may be greater than one. Non-limiting examples of the implementation of the value of the pointer v tending to zero are shown on the right side in FIG. 3.

[0039] Неограничивающим примером реализации стремящегося к нулю изменения значения указателя v в ходе выполнения этапа S145, когда в качестве первого знака используется знак минус, значение v5 указателя в момент t5 времени (конец записи 600) может быть получено как v5=|v4(-1)|-1=0. Таким образом общей формулой выполнения изменения значения в ходе выполнения этапа S145 в упомянутом неограничивающем примере реализации будет vi=|vi-1|-1, где | | указывает модуль или абсолютное значение. Значение 0, получаемое и устанавливаемое в момент t5 времени в проиллюстрированном на Фиг. 3 неограничивающем примере, означает, что в данный момент в очереди запросов никаких запросов нет, поэтому любой запрос может вновь приниматься и безошибочно исполняться согласно формируемой очереди. Способы непосредственного формирования очереди, которые из уровня техники сами по себе известны, не относятся к предмету настоящей заявки. В предпочтительном варианте осуществления очередь может формироваться в целом согласно принципу «первым пришёл - первым ушёл» (FIFO) в той части, в которой этот принцип не противоречит способу, описанному выше со ссылкой на Фиг. 1 (и частично со ссылкой на Фиг. 3), или способу, который будет описан ниже со ссылкой на Фиг. 2 (и частично со ссылкой на Фиг. 3). В случае, если принимаемый на этапе S100 запрос является запросом на запись, его обработку и исполнение осуществляют способом, описанным выше со ссылкой на Фиг. 1 (и частично со ссылкой на Фиг. 3), а если принимаемый на этапе S200 запрос является запросом на чтение, его обработку и исполнение осуществляют способом, который будет описан ниже со ссылкой на Фиг. 2 (и частично со ссылкой на Фиг. 3).[0039] As a non-limiting example of implementing a zero-tuning change in the value of the pointer v during the execution of step S145, when the minus sign is used as the first sign, the value v 5 of the pointer at time t 5 (end of record 600) can be obtained as v 5 =| v 4 (-1)|-1=0. Thus, the general formula for performing a value change during execution of step S145 in the above-mentioned non-limiting example implementation will be v i =|v i-1 |-1, where | | indicates the modulus or absolute value. The value 0 obtained and set at time t 5 in the illustrated FIG. 3 as a non-limiting example, means that there are currently no requests in the request queue, so any request can be accepted again and executed without errors according to the formed queue. Methods for directly forming a queue, which are themselves known from the prior art, do not fall within the scope of the present application. In a preferred embodiment, the queue may be formed generally according to a first-in, first-out (FIFO) principle, to the extent that this principle does not conflict with the method described above with reference to FIG. 1 (and in part with reference to FIG. 3), or a method that will be described below with reference to FIG. 2 (and in part with reference to FIG. 3). In case the request received in step S100 is a write request, it is processed and executed in the manner described above with reference to FIG. 1 (and in part with reference to FIG. 3), and if the request received in step S200 is a read request, it is processed and executed in a manner that will be described below with reference to FIG. 2 (and in part with reference to FIG. 3).

[0040] На Фиг. 2 иллюстрируется блок-схема последовательности операций способа управления чтением из разделяемого ресурса памяти согласно второму аспекту настоящего раскрытия. Поскольку многие этапы способа по Фиг. 2 аналогичны соответствующим этапам способа по Фиг. 1, описание способа по Фиг. 2 будет акцентировано лишь на отличиях от Фиг. 1, чтобы избежать лишних повторений. Данный способ реализуется в системе с приоритетом на чтение, в которой, как указано выше, разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти. Способ начинается с этапа S200, на котором принимают запрос на чтение из разделяемого ресурса памяти от читателя. Прием запроса на чтение может быть осуществлен любым способом, например, через проводную связь или беспроводную связь между соответствующим читателем и устройством 300 или иным компонентом управления чтением-записью, или через программный вызов потока чтения в определенной среде исполнения. В запросе на чтение указывается конкретный разделяемый ресурс памяти и/или его область, указываемые, например, в поле ‘адрес’ запроса, откуда данные необходимо считать.[0040] In FIG. 2 illustrates a flowchart of a method for controlling reading from a shared memory resource according to a second aspect of the present disclosure. Since many steps of the method of FIG. 2 are similar to the corresponding steps of the method in FIG. 1, description of the method according to Fig. 2 will focus only on the differences from Fig. 1 to avoid unnecessary repetitions. This method is implemented in a read-priority system, in which, as stated above, parallel reading from a shared memory resource by multiple readers is allowed, and writing to a shared memory resource is allowed by a single writer, provided there are no read operations from the shared memory resource. The method begins at step S200, which receives a request to read from the shared memory resource from a reader. Reception of a read request may be accomplished in any manner, such as through a wired or wireless link between the appropriate reader and the device 300 or other read-write control component, or through a software call to a read thread in a particular execution environment. The read request specifies a specific shared memory resource and/or its area, indicated, for example, in the ‘address’ field of the request, from where the data must be read.

[0041] Как только запрос на чтение принят на этапе S200, способ переходит на этап S205, на котором считывают текущее значение указателя, связанного с разделяемым ресурсом памяти, указанным в запросе на чтение. Особенности данного этапа S205 соответствуют таковым, описанным выше в отношении этапа S105. После выполнения на этапе S205 считывания текущего значения указателя способ переходит на этап S210, на котором определяют, имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись. Особенности данного этапа S210 соответствуют таковым, описанным выше в отношении этапа S110.[0041] Once the read request is received in step S200, the method proceeds to step S205, in which the current value of the pointer associated with the shared memory resource specified in the read request is read. The features of this step S205 correspond to those described above with respect to step S105. After reading the current pointer value in step S205, the method proceeds to step S210, where it is determined whether the current pointer value has a first character that indicates a write request. The features of this step S210 correspond to those described above with respect to step S110.

[0042] В случае определения на этапе S210, что текущее значение указателя имеет первый знак (например считаным значением является значение -2 со знаком минус, используемым в этом неограничивающем примере в качестве первого знака, как показано на Фиг. 3 в момент t3 времени первой попытки читателя 500c передать запрос на чтение и осуществить чтение), осуществляют возврат на этап S205, поскольку это говорит о том, что среди запросов в данный момент уже есть запрос на запись, поэтому данный запрос на чтение, который был принят на этапе S200, не может быть поставлен в очередь запросов и выполнен до тех пор, пока не будет выполнен уже имеющийся в очереди запросов запрос на запись. Как указано выше, одновременное с записью чтение одного разделяемого ресурса памяти может привести к состояниям гонок данных со сложно предсказуемым поведением, что в конечном счёте может привести к ошибкам в данных этого разделяемого ресурса памяти, поэтому выполнение данного этапа S210 оценки знака текущего значения лишь одного указателя является технически выгодным, поскольку позволяет избежать таких состояний при минимальном расходе ресурсов (например памяти) за счет обработки единственного указателя. Благодаря такой логике и использованию проверки знака значения указателя избегается нежелательная ситуация вечной блокировки писателя, когда уже принятый запрос на запись всегда “отодвигается” в конец очереди каждым последующим принимаемым запросом на чтение от множества имеющихся в системе читателей. В этом смысле способы, описанные на Фиг. 1 и Фиг. 2, являются способами без блокировок.[0042] In the case of determining in step S210 that the current pointer value has a first sign (for example, the read value is the value -2 with a minus sign used in this non-limiting example as the first sign, as shown in FIG. 3 at time t 3 the first attempt of the reader 500c to transmit a read request and carry out the reading), return to step S205, since this indicates that among the requests at the moment there is already a write request, so this read request, which was accepted in step S200, cannot be put into the request queue and executed until a write request already in the request queue is completed. As stated above, simultaneous reading of one shared memory resource while writing may lead to data race conditions with difficult to predict behavior, which may ultimately lead to errors in the data of that shared memory resource, so performing this step S210 of evaluating the sign of the current value of only one pointer is technically advantageous because it allows you to avoid such conditions with minimal consumption of resources (for example, memory) by processing a single pointer. Thanks to this logic and the use of sign checking of the pointer value, the undesirable situation of eternal writer blocking is avoided, when an already accepted write request is always “pushed” to the end of the queue by each subsequent received read request from the set of readers available in the system. In this sense, the methods described in FIGS. 1 and Fig. 2 are lock-free methods.

[0043] В случае определения на этапе S210, что текущее значение указателя не имеет первый знак (например считаным значением является значение 0, как показано для временного интервала от t5 до t6 на Фиг. 3, что означает (из-за отсутствия какого-либо знака и нулевого значения), что запросов в данный момент нет вообще) или имеет второй знак (например считаным значением является значение 2, как показано для временного интервала от t1 до t2 на Фиг. 3, что означает (из-за наличия второго знака), что среди запросов в данный момент запроса на запись нет, а есть лишь два запроса на чтение) - способ переходит на этап S215, на котором осуществляют попытку захватить мьютекс для чтения в упомянутый разделяемый ресурс памяти посредством выполнения атомарной операции CAS над текущим значением указателя, связанного с разделяемым ресурсом памяти. Особенности выполняемой на этапе S215 операции CAS соответствуют таковым выполняемой на этапе S115 операции CAS.[0043] In the case of determining in step S210 that the current value of the pointer does not have a first character (for example, the read value is the value 0, as shown for the time interval t 5 to t 6 in Fig. 3, which means (due to the absence of which -sign and zero value) that there are currently no requests at all) or has a second sign (for example, the read value is the value 2, as shown for the time interval from t 1 to t 2 in Fig. 3, which means (due to presence of the second character) that there is currently no write request among the requests, but only two read requests) - the method proceeds to step S215, at which an attempt is made to acquire a mutex for reading into the mentioned shared memory resource by performing an atomic CAS operation on the current value of the pointer associated with the shared memory resource. The features of the CAS operation performed in step S215 correspond to those of the CAS operation performed in step S115.

[0044] В случае неуспешного выполнения операции CAS на этапе S215, осуществляют возврат на этап S205. В этом случае всю последовательность этапов, начиная с этапа S205, выполняют повторно до тех пор, пока для принятого на этапе S200 запроса на чтение не будет успешно захвачен мьютекс для чтения упомянутого разделяемого ресурса памяти. В противном случае, т.е. когда на этапе S215 операция CAS выполняется успешно, способ переходит к выполнению этапа S220, на котором выполняют стремящееся от нуля изменение значения указателя. После успешного изменения значения указателя мьютекс на чтение для запроса на чтение, который был принят на этапе S200, является захваченным. Особенности выполняемого на этапе S220 изменения соответствуют таковым выполняемого на этапе S120 изменения.[0044] If the CAS operation in step S215 is unsuccessful, it returns to step S205. In this case, the entire sequence of steps starting from step S205 is repeated until a mutex for reading said shared memory resource is successfully acquired for the read request received in step S200. Otherwise, i.e. When the CAS operation is successful in step S215, the method proceeds to execution of step S220, in which a zero-based change in the pointer value is performed. After successfully changing the value of the read mutex pointer for the read request that was received in step S200, it is captured. The features of the change performed in step S220 correspond to those of the change performed in step S120.

[0045] После выполнения этапа S220 способ переходит к выполнению этапа S225, на котором осуществляют операцию чтения разделяемого ресурса памяти согласно запросу на чтение, принятому на этапе S200 от читателя (например читателя 500с). Чтение может осуществляться любым известным из уровня техники способом. Как показано на Фиг. 3 читатель может осуществить несколько попыток инициировать чтение согласно его запросу на чтение. Попытки 1 и 2 этого читателя 500c не будут успешными, т.к. проверка, выполняемая на этапе S210, укажет на наличие у текущего значения указателя первого знака, указывающего наличие стоящего в очереди /осуществляющего запись писателя. Успешной для читателя 500c окажется лишь попытка 3 в момент t6 времени, поскольку в непосредственно предшествующий момент t5 времени инициированная писателем 600 запись завершится. Любые данные, без каких-либо ограничений, могут считываться на данном этапе. После завершения чтения способ переходит на этап S230, на котором освобождают мьютекс на чтение посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя. Особенности выполняемой на этапе S230 операции CAS соответствуют таковым выполняемой на этапе S145 операции CAS.[0045] After executing step S220, the method proceeds to executing step S225, which performs a read operation of the shared memory resource according to the read request received in step S200 from the reader (eg, reader 500c). Reading can be carried out by any method known from the prior art. As shown in FIG. 3, the reader may make several attempts to initiate a read according to its read request. Attempts 1 and 2 of this 500c reader will not be successful because... The check performed in step S210 will indicate whether the current pointer value has a first character indicating the presence of a queuing/writing writer. Only attempt 3 at time t 6 will be successful for reader 500c, since the write initiated by writer 600 will have completed at the immediately preceding time t 5 . Any data, without any restrictions, can be read at this stage. After the reading is completed, the method proceeds to step S230, in which the read mutex is released by performing an atomic CAS operation on the current pointer value, which performs a zero-to-zero change to the pointer value. The features of the CAS operation performed in step S230 correspond to those of the CAS operation performed in step S145.

[0046] В альтернативном аспекте может быть обеспечен реализуемый компьютером способ управления чтением из разделяемого ресурса памяти или записью в разделяемый разделяемого ресурса памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти. Способ согласно данному альтернативному аспекту включает в себя выполнение этапов c S105 по S145 в случае если принятым запросом является запрос на запись или выполнение этапов c S205 по S230 в случае если принятым запросом является запрос на чтение. Указанные этапы были описаны выше подробно, поэтому их повторное описание здесь не приводится.[0046] In an alternative aspect, a computer-implementable method may be provided for controlling reading from or writing to a shared memory resource in a read-priority system in which multiple readers are allowed to read from and write to a shared memory resource in parallel. allowed by a single writer provided there are no reads from the shared memory resource. The method according to this alternative aspect includes performing steps S105 to S145 in case the received request is a write request, or performing steps S205 to S230 in case the received request is a read request. These steps have been described in detail above, so they will not be described again here.

[0047] Еще одним вариантом объединения в одном способе последовательной или параллельной обработки как запросов на запись, так и запросов на чтение в зависимости от того, какой именно тип запроса в данный момент принят (запрос на запись или запрос на чтение), является вариант способа согласно описанному выше третьему аспекту настоящего раскрытия (см. раздел “Сущность изобретения” выше по тексту данного описания). Подробности, особенности и неограничивающие примеры реализации операций способа согласно такому третьему аспекту настоящего изобретения соответствуют таковым, описанным выше со ссылкой на Фиг. 1 и Фиг. 2, поэтому эти подробности, особенности и неограничивающие примеры повторно здесь не описываются.[0047] Another option for combining in one method sequential or parallel processing of both write requests and read requests, depending on what type of request is currently received (write request or read request), is a variant of the method according to the third aspect of the present disclosure described above (see the “Summary” section above in the text of this description). Details, features and non-limiting examples of implementation of the operations of the method according to this third aspect of the present invention correspond to those described above with reference to FIGS. 1 and Fig. 2, therefore, these details, features, and non-limiting examples are not described again here.

[0048] Управление записью-чтением общего ресурса памяти согласно любому из раскрытых в заявке способов, устройств или систем обеспечивает одно или более из снижения количества ошибок в данных, снижения числа блокировок и переключений между предоставлением доступа читателям или предоставления доступа писателю, снижения требований к ресурсам памяти и/или процессора. Достигается это благодаря использованию по меньшей мере одного указателя со знаком, который используется при сигнализации и распределении мьютекста на доступ к общему ресурсу памяти.[0048] Controlling the read-write of a shared memory resource according to any of the methods, devices, or systems disclosed herein provides one or more of a reduction in data errors, a reduction in the number of locks and switches between granting reader access or granting writer access, and reducing resource requirements memory and/or processor. This is achieved through the use of at least one signed pointer, which is used in signaling and allocating mutex access to a shared memory resource.

[0049] На Фиг. 4 иллюстрируется схематичное представление системы управления чтением-записью разделяемого ресурса 400 памяти, которая выполнена с возможностью реализации любого из раскрытых здесь способов. Должно быть понятно, что число компонентов 300, 400, 500, 600 в системе может отличаться от показанного количества как в большую, так и в меньшую сторону. Система управления чтением-записью разделяемого ресурса 400 памяти содержит устройство 300 управления чтением-записью, по меньшей мере один разделяемый ресурс 400 памяти, связанный с упомянутым устройством 300 управления чтением-записью и соответствующим указателем, множество читателей 500 и одного или более писателей 600. Устройство 300 управления чтением-записью и один или более писателей 600, когда последние реализуются как одно или более устройств-писателей 600, могут быть серверами. При этом устройство 300 управления чтением-записью и упомянутые одно или более устройств-писателей 600 могут быть объединены в единый сервер или могут быть представлены разными устройствами/серверами.[0049] In FIG. 4 illustrates a schematic representation of a read-write control system for a shared memory resource 400 that is configured to implement any of the methods disclosed herein. It should be clear that the number of components 300, 400, 500, 600 in the system may differ from the number shown, both up and down. A read-write control system for shared memory resource 400 includes a read-write control device 300, at least one shared memory resource 400 associated with said read-write control device 300 and a corresponding pointer, a plurality of readers 500, and one or more writers 600. The read-write control 300 and one or more writers 600, when the latter are implemented as one or more writer devices 600, may be servers. In this case, the read-write control device 300 and the one or more writer devices 600 may be combined into a single server or may be represented by different devices/servers.

[0050] Устройство 300 содержит по меньшей мере процессор 300.1 и память 300.2, связанные друг с другом функционально. Память 300.2 хранит исполняемые процессором инструкции и любые другие данные необходимые для функционирования устройства 300. В том случае, когда писатель 600, реализуется как устройство-писатель, а не как поток записи в среде исполнения, устройство-писатель 600 может содержать, аналогично устройству 300, по меньшей мере процессор и память (не показанные на Фиг. 4). Кроме того, отметим, что на Фиг. 4 не показаны, с целью упрощения описания, другие возможные компоненты устройства 300 и писателя 600, если последний реализуется как устройство-писатель 600, такие как, например, устройство ввода/вывода, блок питания, блок связи и т. д., которые могут быть аналогичны компонентам традиционного компьютерного сервера, например сервера Dell™ PowerEdge™, работающего под управлением операционной системы Microsoft™ Windows Server™ или Linux. Процессор 300.1 в устройстве 300 может быть реализован на основе, но без ограничения упомянутым, программируемой пользователем вентильной матрицы (Field-Programmable Gate Array, FPGA), интегральной схемы определенного назначения (Application-Specific Integrated Circuit, ASIC), системы на кристалле (System on Chip, SoC), которые выполнены с возможностью осуществления той или иной функциональности или того или иного этапа способа, раскрытых в данной заявке.[0050] Device 300 includes at least a processor 300.1 and a memory 300.2 operatively coupled to each other. Memory 300.2 stores processor-executable instructions and any other data necessary for the operation of device 300. In the case where writer 600 is implemented as a writer rather than as a runtime write stream, writer 600 may contain, similar to device 300, at least a processor and memory (not shown in FIG. 4). Moreover, note that in FIG. 4 are not shown, for the purpose of simplifying the description, other possible components of the device 300 and the writer 600, if the latter is implemented as a writer device 600, such as, for example, an input/output device, a power supply, a communication unit, etc., which may be similar to the components of a traditional computer server, such as a Dell™ PowerEdge™ server running the Microsoft™ Windows Server™ or Linux operating system. The processor 300.1 in the device 300 may be implemented based on, but not limited to, a Field-Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a System on a Chip (System on Chip, SoC), which are configured to implement one or another functionality or one or another stage of the method disclosed in this application.

[0051] Каждый из множества читателей 500, когда реализуется как устройство-читатель, а не поток чтения в среде исполнения, может представлять собой пользовательское устройство, которым может быть любое электронное устройство пользователя под управлением операционной системы типа Windows™, Linux, Android™, Harmony™, iOS™ и т.д. или любой другой операционной системы (например Unix). Неограничивающие примеры пользовательского устройства включают в себя: компьютер, смартфон, умный электроприбор (например, телевизор или колонка), умные часы, AR/VR-гарнитуры и т.д.[0051] Each of the plurality of readers 500, when implemented as a reader device rather than a runtime reader thread, may be a user device, which may be any user electronic device running an operating system such as Windows™, Linux, Android™, Harmony™, iOS™, etc. or any other operating system (for example Unix). Non-limiting examples of a user device include: a computer, a smartphone, a smart appliance (such as a TV or speaker), a smart watch, an AR/VR headset, etc.

[0052] В системе выполнение способа может инициироваться получением на устройстве 300 от одного из читателей 500a, 500b, 500c, 500d запроса на чтение разделяемого ресурса 400 памяти или получением на устройстве 300 от писателя 600 запроса на запись в разделяемый ресурс 400 памяти. Для этих целей, хранящиеся в памяти 300.2 устройства 300 исполняемые процессором 300.1 устройства 300 инструкции в случае приема такого запроса побуждают устройство 300 к выполнению соответствующего способа из раскрытых в данной заявке способов управления чтением-записью разделяемого ресурса 400 памяти.[0052] In a system, execution of the method may be initiated by the device 300 receiving a request from one of the readers 500a, 500b, 500c, 500d to read the shared memory resource 400, or the device 300 receiving from the writer 600 a request to write to the shared memory resource 400. For these purposes, instructions stored in the memory 300.2 of the device 300 executable by the processor 300.1 of the device 300, upon receipt of such a request, cause the device 300 to execute the appropriate method of the methods disclosed in this application for controlling the read-write of the shared memory resource 400.

[0053] Различные репрезентативные реализации раскрытой технологии подробно описаны выше со ссылкой на прилагаемые чертежи. Однако настоящая технология может быть реализована во многих различных формах, и ее не следует рассматривать как ограниченную примерными реализациями, раскрытыми в данном документе. Приведенные в данном документе примеры и условные формулировки призваны главным образом помочь читателю понять принципы настоящей технологии, а не ограничить ее объем такими конкретно приведенными примерами и условиями. Должно быть понятно, что специалисты в данной области смогут разработать различные механизмы, которые, хоть и не описаны в данном документе явным образом, тем не менее воплощают принципы настоящей технологии и включаются в ее суть и объем.[0053] Various representative implementations of the disclosed technology are described in detail above with reference to the accompanying drawings. However, the present technology can be implemented in many different forms and should not be construed as limited to the exemplary implementations disclosed herein. The examples and conditional statements contained herein are intended primarily to assist the reader in understanding the principles of this technology and are not intended to limit its scope to such specific examples and conditions. It should be understood that those skilled in the art will be able to develop various mechanisms that, although not explicitly described herein, nevertheless embody the principles of the present technology and are included in its spirit and scope.

[0054] Кроме того, данное подробное описание может описывать реализации настоящей технологии в относительно упрощенном виде для целей упрощения понимания. Специалисты в данной области поймут, что различные реализации настоящей технологии могут иметь большую сложность. В некоторых случаях также могут быть изложены примеры модификаций настоящей технологии, которые считаются полезными. Это делается лишь для содействия понимаю и, опять же, не для строгого определения объема или очерчивания границ настоящей технологии. Эти модификации не являются исчерпывающим списком, и специалист в данной области сможет осуществить другие модификации, все еще оставаясь при этом в рамках объема настоящей технологии. Кроме того, случаи, когда примеры модификаций не приводятся, не следует толковать так, что никакие модификации не могут быть осуществлены и/или что описанное является единственным способом реализации такого элемента настоящей технологии.[0054] In addition, this detailed description may describe implementations of the present technology in a relatively simplified form for purposes of ease of understanding. Those skilled in the art will appreciate that various implementations of the present technology can be highly complex. In some cases, examples of modifications to the present technology that are considered useful may also be set forth. This is intended only to facilitate understanding and, again, not to strictly define the scope or delineate the boundaries of the present technology. These modifications are not an exhaustive list, and one skilled in the art will be able to make other modifications while still remaining within the scope of the present technology. In addition, where examples of modifications are not provided, it should not be construed to mean that no modifications can be made and/or that what is described is the only way to implement such element of the present technology.

[0055] Используемый здесь термин «и/или» включает в себя любые и все комбинации из одного или более связанных перечисленных элементов. Кроме того, должно быть понятно, что по меньшей мере в некоторых случаях номера этапов или блоков не ограничивают очередность выполнения соответствующих им функций. Некоторые этапы раскрытых способов могут быть объединены в один этап, а некоторый один этап раскрытых способов, наоборот, может быть разбит на несколько подэтапов. В случае если некоторые атомарные операции (например CAS) показаны на фигурах и описаны в этом описании как последовательность нескольких действий, это сделано лишь для упрощения и наглядности описания такой операции, но предполагается что вся такая последовательность исполняется атомарно, т.е. либо она выполняется целиком, либо не выполняется вовсе.[0055] As used herein, the term “and/or” includes any and all combinations of one or more related listed elements. Moreover, it should be understood that, in at least some cases, the step or block numbers do not limit the order in which their corresponding functions are performed. Some stages of the disclosed methods can be combined into one stage, and some one stage of the disclosed methods, on the contrary, can be divided into several sub-stages. If some atomic operations (for example CAS) are shown in the figures and described in this description as a sequence of several actions, this is done only to simplify and clarify the description of such an operation, but it is assumed that the entire sequence is executed atomically, i.e. either it is executed entirely, or it is not executed at all.

[0056] Используемая здесь терминология предназначена только для описания конкретных репрезентативных реализаций и не предназначена для ограничения настоящей технологии. Предполагается, что используемые здесь формы единственного числа включают в себя формы множественного числа, если контекст явно не указывает иное. Кроме того, будет понятно, что термины «содержит», «включает в себя» и/или «содержащий», «включающий в себя», когда они используются в этом описании, определяют наличие заявленных функций, этапов, операций, блоков, элементов и/или компонентов, но не исключают наличие или добавление одной или более других функций, этапов, операций, блоков, элементов, компонентов и/или их групп. Такие слова как “первый” и “второй” используются лишь как служебные слова для разграничения различных однотипных элементов лишь для удобства описания. Таким образом, должно быть понятно, что элемент указанный как “первый”, в другом варианте осуществления может быть “вторым” и наоборот.[0056] The terminology used herein is intended to describe specific representative implementations only and is not intended to limit the present technology. The singular forms used herein are intended to include the plural forms unless the context clearly indicates otherwise. In addition, it will be understood that the terms “comprises,” “includes,” and/or “comprising,” “including,” when used in this specification, define the presence of the claimed functions, steps, operations, blocks, elements, and /or components, but do not exclude the presence or addition of one or more other functions, stages, operations, blocks, elements, components and/or groups thereof. Words such as “first” and “second” are used only as function words to distinguish between different elements of the same type only for convenience of description. Thus, it should be understood that an element indicated as “first” may in another embodiment be “second” and vice versa.

[0057] Настоящая технология может быть реализована как компьютерный программный продукт. Компьютерный программный продукт может включать в себя считываемый компьютером носитель данных (или носители), хранящий считываемые компьютером программные инструкции, которые при исполнении процессором побуждают процессор осуществлять аспекты раскрытой технологии. Считываемый компьютером носитель данных может быть, например, электронным запоминающим устройством, магнитным запоминающим устройством, оптическим запоминающим устройством, электромагнитным запоминающим устройством, полупроводниковым запоминающим устройством или любой их подходящей комбинацией. Неисчерпывающий список более конкретных примеров считываемого компьютером носителя данных включает в себя: портативный компьютерный диск, жесткий диск, оперативную память (RAM), постоянную память (ROM), флэш-память, оптический диск, карту памяти, дискету, носитель с механическим или визуальным кодированием (например, перфокарту или штрих-код) и/или их любую комбинацию. Считываемый компьютером носитель данных, используемый в данном документе, следует рассматривать как долговременный считываемый компьютером носитель. Его не следует рассматривать как переходной сигнал, такой как радиоволны или другие свободно распространяющиеся электромагнитные волны, электромагнитные волны, распространяющиеся по волноводу или другим средам передачи (например, световые импульсы, проходящие по оптоволоконному кабелю), или электрические сигналы, передаваемые по проводу.[0057] The present technology may be implemented as a computer program product. The computer program product may include a computer-readable storage medium (or media) storing computer-readable program instructions that, when executed by a processor, cause the processor to implement aspects of the disclosed technology. The computer-readable storage medium may be, for example, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination thereof. A non-exhaustive list of more specific examples of computer readable storage media includes: portable computer disk, hard disk, random access memory (RAM), read only memory (ROM), flash memory, optical disk, memory card, floppy disk, mechanically or visually encoded media (for example, a punched card or a barcode) and/or any combination thereof. The computer-readable storage media used in this document should be considered non-transitory computer-readable media. It should not be considered a transient signal such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating along a waveguide or other transmission media (such as light pulses traveling along a fiber optic cable), or electrical signals transmitted along a wire.

[0058] Будет понятно, что считываемые компьютером программные инструкции могут быть загружены в соответствующие вычислительные или обрабатывающие устройства (например в устройство 300 или любое иное подходящее устройство или блок управления чтением-записью в любом другом подходящем устройстве) со считываемого компьютером носителя данных или во внешний компьютер или внешнее запоминающее устройство через сеть, такую как Интернет, локальная сеть, глобальная сеть и/или беспроводная сеть. Сетевой интерфейс в вычислительном/обрабатывающем устройстве может принимать считываемые компьютером программные инструкции (и любые другие необходимые для реализации способа данные) через сеть и пересылать считываемые компьютером программные инструкции (и любые другие необходимые для реализации способа данные) для сохранения на считываемом компьютером носителе данных в соответствующем вычислительном или обрабатывающем устройстве.[0058] It will be appreciated that computer readable program instructions may be loaded into appropriate computing or processing devices (e.g., device 300 or any other suitable device or read-write control unit in any other suitable device) from a computer readable storage medium or into an external a computer or external storage device over a network such as the Internet, a local area network, a wide area network, and/or a wireless network. A network interface on a computing/processing device may receive computer-readable program instructions (and any other data required to implement the method) via the network and forward computer-readable program instructions (and any other data required to implement the method) for storage on a computer-readable storage medium in an appropriate storage medium. computing or processing device.

[0059] Модификации и улучшения вышеописанных реализаций настоящей технологии могут стать очевидными для специалистов в данной области техники после ознакомления с настоящим раскрытием. Предшествующее описание предназначено для того, чтобы быть примерным, а не ограничивающим. Поэтому предполагается, что объем настоящей технологии ограничен лишь объемом прилагаемой формулы изобретения.[0059] Modifications and improvements to the above-described implementations of the present technology may become apparent to those skilled in the art upon reading the present disclosure. The foregoing description is intended to be exemplary and not limiting. It is therefore intended that the scope of the present technology be limited only by the scope of the appended claims.

Claims (43)

1. Реализуемый компьютером способ управления записью в разделяемый ресурс памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти, причем способ содержит этапы, на которых:1. A computer-implemented method for controlling writing to a shared memory resource in a read-priority system, in which parallel reading from a shared memory resource by multiple readers is allowed, and writing to a shared memory resource is allowed by a single writer, provided that there are no read operations from the shared memory resource, and the method contains the steps of: - принимают (S100) запрос на запись в разделяемый ресурс памяти от писателя;- receive (S100) a request to write to the shared memory resource from the writer; - считывают (S105) текущее значение указателя, связанного с упомянутым разделяемым ресурсом памяти, причем значение указателя указывает общее количество запросов, подлежащих выполнению, и то, имеется ли среди упомянутых запросов запрос на запись;- reading (S105) the current value of a pointer associated with said shared memory resource, the value of the pointer indicating the total number of requests to be executed and whether there is a write request among said requests; - определяют (S110), имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись:- determining (S110) whether the current value of the pointer has a first character that indicates the presence of a write request: - в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап S105, в противном случае - осуществляют попытку (S115) захватить мьютекс на запись посредством выполнения атомарной операции сравнения с обменом (CAS) над текущим значением указателя:- if it is determined that the current pointer value has the first character, return to step S105, otherwise - an attempt is made (S115) to acquire a write mutex by performing an atomic compare-and-exchange (CAS) operation on the current pointer value: - в случае неуспешного выполнения операции CAS на этапе S115, осуществляют возврат на этап S105, в противном случае - выполняют стремящееся от нуля изменение (S120) значения указателя и устанавливают (S125) знаком измененного значения указателя упомянутый первый знак,- in case of unsuccessful execution of the CAS operation at step S115, return to step S105, otherwise - perform a change (S120) of the pointer value tending from zero and set (S125) the sign of the changed pointer value to the said first sign, - считывают (S130) текущее значение указателя для определения, имеются ли незавершенные операции чтения из упомянутого разделяемого ресурса памяти, соответствующие одному или более ранее принятым запросам на чтение соответственно от одного или более читателей:- reading (S130) the current value of the pointer to determine whether there are pending read operations from the shared memory resource corresponding to one or more previously received read requests from one or more readers, respectively: - в случае, если незавершенные операции чтения имеются:- in case there are uncompleted read operations: - ожидают (S135) завершения всех незавершенных операций чтения,- wait (S135) for completion of all pending read operations, - в случае, если незавершенные операции чтения отсутствуют:- in case there are no pending read operations: - осуществляют (S140) операцию записи в разделяемый ресурс памяти,- perform (S140) a write operation to the shared memory resource, - освобождают (S145) мьютекс на запись посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.- release (S145) the write mutex by performing an atomic CAS operation on the current pointer value, in which a change in the pointer value tends to zero is performed. 2. Реализуемый компьютером способ управления чтением из разделяемого ресурса памяти в системе с приоритетом на чтение, в которой разрешается параллельное чтение из разделяемого ресурса памяти множеством читателей, а запись в разделяемый ресурс памяти разрешается единственным писателем при условии отсутствия операций чтения из разделяемого ресурса памяти, причем способ содержит этапы, на которых:2. A computer-implemented method for controlling reading from a shared memory resource in a read-priority system, in which parallel reading from a shared memory resource by multiple readers is allowed, and writing to a shared memory resource is allowed by a single writer, provided that there are no read operations from the shared memory resource, and the method contains the steps of: - принимают (S200) запрос на чтение упомянутого разделяемого ресурса памяти от читателя;- receiving (S200) a request to read said shared memory resource from the reader; - считывают (S205) текущее значение указателя;- read (S205) the current value of the pointer; - определяют (S210), имеет ли текущее значение указателя первый знак, который указывает наличие запроса на запись:- determining (S210) whether the current value of the pointer has a first character that indicates the presence of a write request: - в случае определения, что текущее значение указателя имеет первый знак, осуществляют возврат на этап S205, в противном случае - осуществляют попытку захватить мьютекс на чтение посредством выполнения (S215) атомарной операции сравнения с обменом (CAS) над текущим значением указателя:- if it is determined that the current pointer value has the first character, return to step S205, otherwise - an attempt is made to acquire a mutex for reading by performing (S215) an atomic comparison with exchange (CAS) operation on the current pointer value: - в случае неуспешного выполнения операции CAS на этапе S215, осуществляют возврат на этап S205, в противном случае - выполняют стремящееся от нуля изменение (S220) значения указателя,- in case of unsuccessful execution of the CAS operation at step S215, return to step S205, otherwise - perform a change tending from zero (S220) to the value of the pointer, - осуществляют (S225) операцию чтения из разделяемого ресурса памяти,- perform (S225) a read operation from the shared memory resource, - освобождают (S230) мьютекс на чтение посредством выполнения атомарной операции CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.- release (S230) the mutex for reading by performing an atomic CAS operation on the current pointer value, in which a change in the pointer value tends to zero is performed. 3. Способ по п. 1 или 2, в котором по меньшей мере часть незавершенных операций чтения выполняется параллельно.3. The method of claim 1 or 2, wherein at least a portion of the pending read operations are performed in parallel. 4. Способ по п. 1 или 2, в котором первым знаком является знак отрицательного числа или знак положительного числа.4. The method according to claim 1 or 2, in which the first character is the sign of a negative number or the sign of a positive number. 5. Способ по п. 1 или 2, в котором число, на величину которого выполняют стремящееся от нуля изменение (S120, S220) значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение (S145, S230) значения указателя, равны.5. The method according to claim 1 or 2, in which the number by the value of which the pointer value changes (S120, S220) tending from zero, and the number by the value of which the pointer value changes (S145, S230) tending to zero, are equal . 6. Способ по п. 5, в котором упомянутым целым числом является 1.6. The method according to claim 5, wherein said integer is 1. 7. Способ по п. 1 или 2, в котором читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи.7. The method according to claim 1 or 2, wherein the reader is a reader device or a reading thread, and the writer is a writer device or a writing thread. 8. Способ по п. 1 или 2, в котором разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является жесткий диск (HDD), твердотельный накопитель (SSD) или энергонезависимая экспресс-память (NVMe).8. The method of claim 1 or 2, wherein the shared memory resource is at least a memory cell, the memory being a hard disk drive (HDD), solid state drive (SSD), or non-volatile memory express (NVMe). 9. Реализуемый компьютером способ управления чтением из разделяемого ресурса памяти множеством читателей или записью в него писателем на основе указателя, причем способ содержит этапы, на которых:9. A computer-implemented method of controlling reading from or writing to a shared memory resource by a plurality of readers based on a pointer, the method comprising the steps of: - при возникновении запроса на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, осуществляют попытку захватить, соответственно, мьютекс на чтение и/или мьютекс на запись, выполняя операцию сравнения с обменом (CAS) над текущим значением указателя, при этом при успешном выполнении операции CAS выполняют стремящееся от нуля изменение значения указателя, причем, если упомянутый запрос, для которого успешно выполнена операция CAS, является запросом на запись, то дополнительно устанавливают знаком измененного значения упомянутого указателя первый знак,- when a request arises to read a shared memory resource or to write to a shared memory resource, an attempt is made to seize, respectively, a mutex for reading and/or a mutex for writing, performing a comparison with exchange (CAS) operation on the current pointer value, and if successful When performing a CAS operation, a change in the value of the pointer is performed, tending from zero, and if the said request, for which the CAS operation was successfully completed, is a write request, then the first character is additionally set to the changed value of the said pointer, - для каждого запроса проверяют значение упомянутого указателя со знаком и- for each request, the value of the mentioned signed pointer is checked and - если проверенное значение упомянутого указателя со знаком равно предопределенному значению, осуществляют запись в разделяемый ресурс памяти согласно запросу на запись от писателя,- if the checked value of said signed pointer is equal to a predefined value, write to the shared memory resource according to the write request from the writer, - если проверенное значение упомянутого указателя со знаком отлично от упомянутого предопределенного значения, осуществляют чтение из разделяемого ресурса памяти согласно запросу на чтение от читателя,- if the checked value of said signed pointer is different from said predefined value, read from the shared memory resource according to a read request from the reader, - после завершения операции записи или чтения освобождают, соответственно, мьютекс на чтение или мьютекс на запись, выполняя операцию CAS над текущим значением указателя, при которой выполняют стремящееся к нулю изменение значения указателя.- after completion of the write or read operation, the read mutex or the write mutex is released, respectively, by performing a CAS operation on the current pointer value, in which a change in the pointer value tends to zero is performed. 10. Способ по пункту 9, в котором первым знаком является знак отрицательного числа или знак положительного числа.10. The method according to paragraph 9, in which the first character is the sign of a negative number or the sign of a positive number. 11. Способ по пункту 9, в котором число, на величину которого выполняют стремящееся от нуля изменение значения указателя, и число, на величину которого выполняют стремящееся к нулю изменение значения указателя, равны.11. The method according to paragraph 9, in which the number by the value of which the value of the pointer is changed tending from zero, and the number by the value of which the value of the pointer is changed by the value tending to zero, are equal. 12. Способ по пункту 11, в котором упомянутым целым числом является 1.12. The method of claim 11, wherein said integer is 1. 13. Способ по пункту 9, в котором упомянутым предопределенным значением указателя со знаком является ‘-1’.13. The method of claim 9, wherein said predefined signed pointer value is '-1'. 14. Способ по пункту 9, в котором читателем является устройство-читатель или поток чтения, а писателем является устройство-писатель или поток записи.14. The method of claim 9, wherein the reader is a reader device or reading thread, and the writer is a writer device or writing thread. 15. Способ по пункту 9, в котором разделяемым ресурсом памяти является по меньшей мере ячейка памяти, причем памятью является жесткий диск (HDD), твердотельный накопитель (SSD) или энергонезависимая экспресс-память (NVMe).15. The method of claim 9, wherein the shared memory resource is at least a memory cell, the memory being a hard disk drive (HDD), solid state drive (SSD), or non-volatile memory express (NVMe). 16. Способ по пункту 9, в котором абсолютное значение указателя указывает общее количество запросов, подлежащих выполнению, а наличие у значения указателя первого знака указывает наличие запроса на запись.16. The method of claim 9, wherein the absolute value of the pointer indicates the total number of requests to be executed, and the presence of a first character in the pointer value indicates the presence of a write request. 17. Система управления чтением-записью разделяемого ресурса (400) памяти, содержащая устройство (300) управления чтением-записью, упомянутый разделяемый ресурс (400) памяти, связанный с упомянутым устройством (300) управления чтением-записью, множество читателей (500) и одного или более писателей (600),17. A read-write control system for a shared memory resource (400), comprising a read-write control device (300), said shared memory resource (400) associated with said read-write control device (300), a plurality of readers (500), and one or more writers (600), причем устройство (300) содержит процессор (300.1) и память (300.2), хранящую исполняемые процессором инструкции, причем, при получении запроса на чтение разделяемого ресурса (400) памяти от одного или более из множества читателей (500) или на запись в разделяемый ресурс (400) памяти от одного или более писателей (600), процессор (300.1) выполнен с возможностью осуществления способа управления чтением-записью из/в разделяемый ресурс (400) памяти по любому из пунктов с 9 по 16 посредством исполнения упомянутых исполняемых процессором инструкций.wherein the device (300) includes a processor (300.1) and a memory (300.2) storing instructions executable by the processor, wherein upon receiving a request to read a shared memory resource (400) from one or more of a plurality of readers (500) or to write to a shared resource (400) of memory from one or more writers (600), the processor (300.1) is configured to implement the method of controlling read-write from/to a shared memory resource (400) according to any one of items 9 to 16 by executing said processor-executable instructions. 18. Система по пункту 17, в котором разделяемый ресурс памяти является внутренним разделяемым ресурсом памяти, содержащимся в памяти (300.2) упомянутого устройства, или внешним разделяемым ресурсом памяти, который доступен упомянутому устройству и с которым упомянутое устройство выполнено с возможностью осуществления проводной и/или беспроводной связи.18. The system of claim 17, wherein the shared memory resource is an internal shared memory resource contained in the memory (300.2) of said device, or an external shared memory resource that is accessible to said device and with which said device is configured to perform wired and/or wireless communication. 19. Считываемый компьютером носитель, хранящий исполняемые компьютером инструкции, которые, при получении запросов на чтение разделяемого ресурса памяти или на запись в разделяемый ресурс памяти, побуждают компьютер к выполнению способа управления чтением-записью из/в разделяемый ресурс (400) памяти по любому из пунктов с 9 по 16 посредством исполнения упомянутых исполняемых процессором инструкций.19. A computer-readable medium storing computer-executable instructions that, upon receiving requests to read a shared memory resource or write to a shared memory resource, cause the computer to execute a method for controlling read-write from/to a shared memory resource (400) on either items 9 to 16 by executing said processor-executable instructions.
RU2023117238A 2023-06-29 Method of controlling reading from shared memory resource and writing to it (versions), system and computer-readable medium implementing said method RU2816292C1 (en)

Publications (1)

Publication Number Publication Date
RU2816292C1 true RU2816292C1 (en) 2024-03-28

Family

ID=

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5644768A (en) * 1994-12-09 1997-07-01 Borland International, Inc. Systems and methods for sharing resources in a multi-user environment
US20060218556A1 (en) * 2001-09-28 2006-09-28 Nemirovsky Mario D Mechanism for managing resource locking in a multi-threaded environment
US20130290967A1 (en) * 2012-04-27 2013-10-31 Irina Calciu System and Method for Implementing NUMA-Aware Reader-Writer Locks
RU2501082C2 (en) * 2008-05-08 2013-12-10 Майкрософт Корпорейшн Controlling access to documents using file locks
CN103645863A (en) * 2013-12-12 2014-03-19 北京奇虎科技有限公司 Data reading and writing-in methods and systems of shared memory
US20150019739A1 (en) * 2010-10-11 2015-01-15 International Business Machines Corporation Two-level management of locks on shared resources

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5644768A (en) * 1994-12-09 1997-07-01 Borland International, Inc. Systems and methods for sharing resources in a multi-user environment
US20060218556A1 (en) * 2001-09-28 2006-09-28 Nemirovsky Mario D Mechanism for managing resource locking in a multi-threaded environment
RU2501082C2 (en) * 2008-05-08 2013-12-10 Майкрософт Корпорейшн Controlling access to documents using file locks
US20150019739A1 (en) * 2010-10-11 2015-01-15 International Business Machines Corporation Two-level management of locks on shared resources
US20130290967A1 (en) * 2012-04-27 2013-10-31 Irina Calciu System and Method for Implementing NUMA-Aware Reader-Writer Locks
CN103645863A (en) * 2013-12-12 2014-03-19 北京奇虎科技有限公司 Data reading and writing-in methods and systems of shared memory

Similar Documents

Publication Publication Date Title
US8510738B2 (en) Preventing unnecessary context switching by employing an indicator associated with a lock on a resource
US8140825B2 (en) Systems and methods for selectively closing pages in a memory
US11507524B2 (en) RTOS/OS architecture for context switching that solves the diminishing bandwidth problem and the RTOS response time problem using unsorted ready lists
US20230315526A1 (en) Lock-free work-stealing thread scheduler
US8495642B2 (en) Mechanism for priority inheritance for read/write locks
CN114008589A (en) Dynamic code loading for multiple executions on a sequential processor
JP2022531601A (en) Executing multiple data requests on a multi-core processor
US9229716B2 (en) Time-based task priority boost management using boost register values
US9940128B2 (en) Conditional access with timeout
US10372608B2 (en) Split head invalidation for consumer batching in pointer rings
US20210311773A1 (en) Efficient Condition Variables via Delegated Condition Evaluation
RU2816292C1 (en) Method of controlling reading from shared memory resource and writing to it (versions), system and computer-readable medium implementing said method
US11481250B2 (en) Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values
US8504749B2 (en) Synchronization of multiple processor cores
EP4068094A1 (en) Lock-free ring buffer
US9081630B2 (en) Hardware-implemented semaphore for resource access based on presence of a memory buffer in a memory pool
US20230236878A1 (en) Efficiently launching tasks on a processor
US11372649B2 (en) Flow control for multi-threaded access to contentious resource(s)
CN115904644A (en) Task scheduling method, electronic device and computer program product
CN113778910A (en) Data cache processing method and device
US10073723B2 (en) Dynamic range-based messaging
US10158580B2 (en) Utilizing access control data structures for sharing computing resources
CN117632794A (en) Invoking pending cache line evictions
CN118626282A (en) Method for acquiring lock of data object, network card and computing device
CN115357526A (en) Data processing method and device, electronic equipment and computer readable storage medium