在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1776|回复: 4

[求助] queue中取出的值窜了

[复制链接]
发表于 2017-2-26 10:39:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
遇到一个问题,2个task A,B,task A收集数据x放在队列queue里,task B再从队列queue取x,赋值给b_tmp,当task A收集到下一个数y的时候,b_tmp也变成了y,此时task B为x的值还没执行完,也没有从queue中取y,b_tmp在B中定义。请问什么原因造成的?谢谢!示意代码如下

my_transaction trans_queue[$];
task A(my_transaction req);
  trans_queue.push_back(req);
endtask

task B();
  if(trans_queue.size>0) begin
    my_transaction trans_tmp;
    trans_tmp=new();
    trans_tmp=trans_queue.pup_front():
    ......
  end
endtask

fork
  forvever begin
    A(my_transaction req);
  end
  forvever begin
    B();
  end

join_none
发表于 2017-2-28 11:13:34 | 显示全部楼层
感觉好像是同时运行了多个线程。
发表于 2017-2-28 11:43:34 | 显示全部楼层
压到队列中的每一个object都必是new()出的新对象;要不然所有的object其实是 指向同一个object的多个指针
发表于 2017-2-28 11:45:05 | 显示全部楼层
可以写成 trans_queue.push_back(req.clone());
发表于 2017-3-8 15:31:29 | 显示全部楼层
基本就一个原因,A中每次push_back的对象,其实都是一个(同一个指针);B中这句话多余 trans_tmp=new();。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 03:35 , Processed in 0.017683 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表