FSVO "new" <g>CharlesSent from a mobile; please excuse the brevity.
-------- Original message --------From: Paul Gilmartin
<[email protected]> Date: 7/30/19 12:39 PM
(GMT-05:00) To: [email protected] Subject: Re: Circular Queue
Handling in Assembler On 2019-07-30, at 10:19:34, Gary Weinhold wrote:> > After
loading the new index value, check if it's 256. If so, do a> compare and swap
for 255 to 0; if another process beat you to it, CS> fails and you have to
reload the index value you now want (like 0 to 1),> just like you would if
compare and swap fails. The check for new index> = 255 has to be done in every
loop.> > Or, it more be more efficient to do as was suggested in another
answer:> after loading the new index value, aNd the register with '000000FF'.>
> This may not be sufficient to protect the data being maintained in the>
circular queue. If my instance acquires index 42, for example, with the> above
CS logic, there may be nothing to ensure that my instance actually> get the CPU
cycles to move data to the associated 64-bit address before> the index is
cycled by higher priority processes and some other instance> acquires index
42.> +1... if the producer does the CS first, there's no hazard two
instances'acquiring "42"; rather the hazard is that a consumer will fetch the
databefore the producer finishes moving it in.Surely, the problem of managing a
FIFO queue, whether with a circularbuffer or otherwise, has been posed and
solved numerous times. Theremust be a published solution available.Are there
new z Series instructions to facilitate this? Perhaps PLO?-- gil