【发布时间】:2021-12-29 04:29:15
【问题描述】:
是否可以使 MATLAB PollableDataQueue 后进先出 (LIFO) 而不是先进先出 (FIFO)?或者,有没有办法获取队列中的最后一个条目而不是第一个条目?
例如,请参见以下说明 PollableDataQueue 当前行为的代码:
%parpool;
q = parallel.pool.PollableDataQueue;
f = parfeval(@test,1,q);
for jj = 1:4
poll(q)
pause(0.25)
end
fetchOutputs(f)
function x0 = test(q)
x0 = [];
for jj = 1:20
x0 = [x0, rand(1)];
send(q, x0);
pause(0.01);
end
end
ans =
[]
ans =
0.7918
ans =
0.7918 0.1528
ans =
0.7918 0.1528 0.0854
ans =
Columns 1 through 12
0.7918 0.1528 0.0854 0.9955 0.3557 0.1679 0.6713 0.5398 0.6599 0.9344 0.7200 0.4450
Columns 13 through 20
0.6622 0.4427 0.9791 0.5114 0.0200 0.6054 0.0479 0.3470
调用“poll(q)”会按照添加到队列 (FIFO) 中的顺序,将添加到 x0 的值一一返回。相反,我想在调用 poll(q) 的那一刻检索队列中的最后一个值。
例如,由于下面的代码在连续调用“poll(q)”之间等待 0.25 秒,并且由于每 0.01 秒将值添加到 x0,我怀疑到第二次“poll(q)”是调用时,应该已经记录了 x0 的第 25 个值。然而,我第二次调用“poll(q)”时只得到第一个条目(FIFO 而不是 LIFO)。
【问题讨论】: