Spec-Zone.ru › LÖVE

Канал:performAtomic

Доступно начиная с LÖVE 0.10.0
Данная функция не поддерживается в более ранних версиях.

Выполняет указанную функцию атомарно относительно этого канала.

Вызов нескольких методов подряд на одном канале часто бывает полезен. Однако, если несколько потоков вызывают методы этого канала одновременно, разные вызовы в каждом потоке могут оказаться переплетёнными (например, один или несколько вызовов второго потока могут произойти между вызовами первого потока.)

Этот метод избегает этой проблемы, гарантируя, что поток, вызывающий метод, имеет эксклюзивный доступ к каналу до тех пор, пока не вернётся указанная функция.

В функции, передаваемой этому методу, следует избегать длительных или иных дорогостоящих операций.

Функция

Синопсис

ret1, ... = Channel:performAtomic( func, arg1, ... )

Аргументы

function func
Функция для вызова, формат function(channel, arg1, arg2, ...) end. Канал передаётся как первый аргумент функции при её вызове.
any arg1
Дополнительные аргументы, которые будет принимать указанная функция при вызове.
any ...
Дополнительные аргументы, которые будет принимать указанная функция при вызове.

Возвращаемые значения

any ret1
Первое возвращаемое значение указанной функции (если таковое имеется).
any ...
Другие возвращаемые значения.

Примеры

Переустановка содержимого канала на единственное значение

local function setChannel(channel, value)
    channel:clear()
    channel:push(value)
end
 
local c = love.thread.getChannel("MyChannel")
c:performAtomic(setChannel, "hello world")

См. также

  • Канал
  • Поток


© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/Channel:performAtomic

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API