queue中取出的值窜了
时间:10-02
整理:3721RD
点击:
遇到一个问题,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
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
感觉好像是同时运行了多个线程。
压到队列中的每一个object都必是new()出的新对象;要不然所有的object其实是 指向同一个object的多个指针
可以写成 trans_queue.push_back(req.clone());
基本就一个原因,A中每次push_back的对象,其实都是一个(同一个指针);B中这句话多余 trans_tmp=new();。