以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  如果几个策略同时对同一个extgbdata变量作累加操作,会否出错?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=78599)

--  作者:roadpeace
--  发布时间:2015/5/14 14:18:23
--  如果几个策略同时对同一个extgbdata变量作累加操作,会否出错?
例如  extgbdataset(\'a\',extgbdata(\'a\')+1);

打个比方今天发生一次开仓,我就加一,当几个策略同时执行这个(同时开仓),有没可能算错?
比如现在这个 extgbdata(\'a\')=1,两个策略同时发生开仓,会不会算成了 =2?(就是说两个都是1+1=2),并且写进去结果

如果这个操作是有锁住记录的话应该是不会算错的,我就是问金字塔的系统上有没锁住


--  作者:yukizzc
--  发布时间:2015/5/14 14:52:35
--  

那就+2了,这种全局变量是金字塔内部公用的,你所有代码对他的操作都是执行的。

你所谓锁住是要则么锁呢,同时开仓是指同一根k?那你不同策略周期是否都是同样的。


--  作者:roadpeace
--  发布时间:2015/5/14 15:02:07
--  
我意思是,同一时间两个程序都发生这个extgbdataset(\'a\',extgbdata(\'a\')+1);
的话,会不会只加了1,因为不知道金字塔机制到底是怎样的。

比如说,如果是先读出来,然后再+1,写回去这个变量,由于同时,就有可能读出来的都是1,然后都是各自+1,就是都等于2了,所以同时写回去,就有可能是2

但是如果有锁记录,就变成是串行操作,先处理完一个再一个,就不会算错

用数据库语言来理解就是:select for update,

--  作者:yukizzc
--  发布时间:2015/5/14 15:44:12
--  

会写2的,这个写入的速度远远比你所谓的同时来得快。你同一时刻的程序运行在内部还是有细微的前后的