Корректно ли так делать?

Страницы: 1
RSS
Корректно ли так делать?
 
Код
-- Функция вызывается перед остановкой скрипта
function OnStop(signal)
  stopped = true; -- Остановили исполнение кода 
end;

-- Функция вызывается перед закрытием квика
function OnClose()
  stopped = true; -- закрыли квик, надо остановить исполнение кода
end;


function OnMyAllTrade(trade)
--Тут что-то делаем
end;

function OnMyConnected(flag)
--Тут выводим сообщение
end;

function OnFakeConnected(flag)
end;

function OnFakeAllTrade(trade)
end;

OnConnec ted = OnFakeConnected;
OnAllTr ade = OnFakeAllTrade;

function main()
  OnConnec ted = OnMyConnected; --как такой подход с точки зрения потоков?
  OnAllTr ade = OnMyAllTrade; --как такой подход с точки зрения потоков?
  while not stopped do
    sleep(1);
  end; --while    
end;
Есть такой код.
Корректно ли присваивание OnConnec ted = OnMyConnected;   OnAllTr ade = OnMyAllTrade;
Функция main и колбеки работают в разных потоках. Не возникнет ли проблемы?
 
Само по себе присвоение атомарно, выполняется под локом (см. сорцы lua_setglobal), так что с этим проблем не будет. Гонка может в вашем коде возникнуть, например
Код
local connected = false

local function OnMyConnected()
  connected = true
end

local function OnMyDisconnected()
  connected = false
end

local function Stub()
end

OnConnec ted = Stub
OnDisconnec ted = Stub

function main()
  connected = isConnected()
  -- тут состояние подключения могло измениться
  OnConnec ted = OnMyConnected
  -- или тут
  OnDisconnec ted = OnMyDisconnected
end
Страницы: 1
Читают тему
Наверх