From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Portable memory barrier? Date: Mon, 8 May 2017 09:45:23 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <0fc56bf7-1cfa-4776-9c47-a573db315c5f@googlegroups.com> NNTP-Posting-Host: vZYCW951TbFitc4GdEwQJg.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:46697 Date: 2017-05-08T09:45:23+02:00 List-Id: On 07/05/2017 22:18, Robert Eachus wrote: > On Friday, May 5, 2017 at 10:23:45 PM UTC-4, Jere wrote: > >> Are there any Ada language constructs that can help? > > If the read of the circular buffer is occurring possibly on a > different CPU core which shares one or more cache levels, the > instructions to make a location Volatile will be ignored by the CPU. The > compiler will mark the location, and the CPU will keep track of the type > of memory, but Volatile does not cause writes to main memory. That is ordering accesses to the same location, while the concern is about accesses to two independent locations and possibility of these being reordered by the CPU. In particular the reader's part: read location A [write-pointer for buffer empty check] read location B [buffer item at read-pointer] The writer's part write location B [buffer item at write-pointer] write location A [write-pointer increment] Now if you reorder reader's or writer's sequences you will get a bug. Which will never happen for buffers larger than one item, but nonetheless. I don't believe either of the sequences can get reordered by the CPU, but it is only belief and common sense. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de