设为首页收藏本站

 找回密码
 注册
查看: 2383|回复: 3
打印 上一主题 下一主题

请教SetTBProfileString并发问题 [复制链接]

Rank: 2

精华
0
UID
5564
积分
76
帖子
34
主题
8
阅读权限
30
注册时间
2009-9-29
最后登录
2017-10-30
跳转到指定楼层
1#
发表于 2012-5-8 21:53:18 |只看该作者 |倒序浏览
我用SetTBProfileString记录一些关易的变量值,但不知道SetTBProfileString对并发是怎么控制,如果遇到下面这种情况会出现问题吗?
比如我每天日内盯10个品种,并记录开仓的品种数量,如果有3个品种开仓后,之后产生信号的品种都不再交易,

假如目前profilestring里记录的值是2, 这时品种A与B在几乎同一时刻产生交易信号了,
A品种的公式应用中通过GetTBProfileString读取目前已开仓品种数,判断当前数目小于3,于是将品种数+1,并通过SetTBProfileString保存,
而就在A品种SetTBProfileString执行前,B品正好也通过GetTBProfileString读取数值,得到当前开仓品种为2,于是也将品种数+1,再SetTBProfileString保存,这时SetTBProfileString保存的值是3,
而实际上它应该为4,原来要控制3个品种开仓变成实际上开了4个品种了.


理论上讲会有这种情况发生吗?尽管实际上两个品种同时产生信号的概率很小。

那如果SetTBProfileString的并发机制不能实现我上述的控制要求,可有好的办法呢?

Rank: 2

精华
0
UID
110286
积分
87
帖子
53
主题
15
阅读权限
30
注册时间
2012-5-2
最后登录
2013-6-2
2#
发表于 2012-5-9 01:50:07 |只看该作者
加一后先再GET一次判断一下与上次GET的值是否一致,如一致再SET

使用道具 举报

Rank: 2

精华
0
UID
5564
积分
76
帖子
34
主题
8
阅读权限
30
注册时间
2009-9-29
最后登录
2017-10-30
3#
发表于 2012-5-9 08:40:10 |只看该作者
海风 发表于 2012-5-9 01:50
加一后先再GET一次判断一下与上次GET的值是否一致,如一致再SET

即使是这样,也有可能在你第二次GET之后,SET之前,刚好有另一品种触发信号,于是又出现上述描述的问题,个人觉得要么要有队列机制,要么要有锁表机制才能实现准确控制.

使用道具 举报

初级大户

酱油

Rank: 5Rank: 5

精华
0
UID
37561
积分
1108
帖子
395
主题
9
阅读权限
60
注册时间
2011-5-4
最后登录
2014-11-3
4#
发表于 2012-5-9 08:52:37 |只看该作者
key可以用变量的吧。。。用品种名字代替键名然后用10 个相加是否大于三就避免了。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-13 22:10

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部