Channel:performAtomic (日本語)

LÖVE 0.10.0 から使用可能
この関数は以前のバージョンでは非対応です。

このチャネルに対してアトミックに指定された関数を実行します。

多くの場合、同一チャンネルで多数のメソッドを連続で呼び出すことは有用です。 しかしながら多数のスレッドが同時に本チャンネルのメソッドを呼び出す場合は、各スレッドで異なる呼び出しは交互配置されて終了してしまいます (例えば一次スレッド呼び出し間に一つ以上の二次スレッドの呼び出しが発生する場合があります)。

このメソッドは指定された関数に復帰するまでメソッドを呼び出しているスレッドがチャンネルに対する排他アクセス権を有していることを確認することで本問題を回避します。

O.png このメソッドで指定される関数として長時間実行また高価なコードは避けるべきです。  


関数

概要

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")

関数



そのほかの言語