Канал: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