搜索
aardio官方社区 门户 查看主题

关于线程共享表结构的疑问 [完结]

发布者: longxiao7 | 发布时间: 2014-2-8 10:02| 查看数: 2685| 评论数: 3|帖子模式

本帖最后由 longxiao7 于 2014-2-8 12:42 编辑

  1. io.open();

  2. import thread.table;
  3. import thread.works;

  4. var data = thread.table("data");

  5. newThread = thread.works( 1,
  6.         function( id ) {
  7.                 import thread.table;
  8.                 data = thread.table("data");
  9.                 data.push(id);
  10.                 io.print(id);
  11.                 return;
  12.         }
  13. );

  14. var newArray = {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21};
  15. for key,value in newArray
  16. {
  17.         newThread.push(value);
  18. }
复制代码



newArray  和 data 的结构是否会一样呢?

当我使用
for key,v in data.each()
{
        io.print(key,'----',v);
}
输出的时候 和自己预期的结果有很大差异,原因是什么?

还有一个问题 如何在所有的newThread都结束的时候 再执行某段代码 (不是很了解线程

最新评论

神码 发表于 2014-2-8 12:00:03

你这里可能有逻辑错误, push() 是追加,如果你重复执行线程,共享表的键值不一定是相等的。 注意在开发环境中共享表也是所有线程共享的( 调试只会创建线程

你这里可能有逻辑错误,
push() 是追加,如果你重复执行线程,共享表的键值不一定是相等的。
注意在开发环境中共享表也是所有线程共享的( 调试只会创建线程而不是新进程 )。

所以你需要这样写结果就是一致的:
  1. import thread.table;
  2. import thread.works;

  3. var data = thread.table("data2");
  4. var works = thread.works( 1,
  5.     function( id ) {
  6.             import thread.table;
  7.             data = thread.table("data2");
  8.             data.push(id);
  9.             io.print(id);
  10.             return;
  11.     }
  12. );

  13. io.open();
  14. var array = {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21};
  15. for key,value in array{
  16.         works.push(value);
  17. }

  18. //等待线程执行完成
  19. works.waitClose()

  20. for key,v in data.each(){
  21.         io.print(key,'----',v);
  22. }

  23. //清空共享表
  24. data.pop( data.count() )
复制代码


thread.works使用wait() 或 waitClose() 等待所有线程结束。

评分

参与人数 2银币 +12 收起 理由
handongcn + 10 赞一个!
longxiao7 + 2 很给力!

查看全部评分

longxiao7 发表于 2014-2-8 12:41:59

哦 我明白了 因为不同线程是并行的,所以在不锁定的情况下,可能会不按照顺序push 这时候如果外面在同时输出,就可能会因为数据同时在变化 所以输出结果看

哦   我明白了
因为不同线程是并行的,所以在不锁定的情况下,可能会不按照顺序push
这时候如果外面在同时输出,就可能会因为数据同时在变化 所以输出结果看起来是不一样的
实际上在线程结束以后 是一样的

我的问题出在错误认为for遍历是在所有线程结束以后   感谢楼上的回答
qq317813922 发表于 2016-4-25 09:32:54

学习了

学习了

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-11-23 20:36 , Processed in 0.093750 second(s), 19 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表