* Ivan Zhakov wrote:
> On 13 February 2014 23:40, Stefan Fuhrmann <stefan.fuhrmann_at_wandisco.com>
wrote:
> > On Thu, Feb 13, 2014 at 7:55 PM, Ivan Zhakov <ivan_at_visualsvn.com> wrote:
> >> On 13 February 2014 22:24, <stefan2_at_apache.org> wrote:
> >> > Author: stefan2
> >> > Date: Thu Feb 13 18:24:17 2014
> >> > New Revision: 1567996
> >> >
> >> > URL: http://svn.apache.org/r1567996
> >> >
> >> >
> >> >
> >> > +/* Count a hit in ENTRY within CACHE.
> >> >
> >> > + */
> >> > +static void
> >> > +increment_hit_counters(svn_membuffer_t *cache, entry_t *entry)
> >> > +{
> >> > + /* To minimize the memory footprint of the cache index, we limit
> >> > local
> >> > + * hit counters to 32 bits. These may overflow and we must make
> >> > sure that
> >> > + * the global sums are still (roughly due to races) the sum of
> >> > all local
> >> > + * counters. */
> >> > + if (++entry->hit_count == 0)
> >> > + cache->hit_count -= APR_UINT32_MAX;
> >> > + else
> >> > + cache->hit_count++;
> >> > +
> >>
> >> As far I understand this counters are updated from several threads
> >> without mutex?
> >
> > That is correct.
> >
> >> In that case we have to use atomic functions to
> >> increment them, otherwise we may skip hit_count == 0 in some cases.
> >
> > No.
> >
> > Assuming that the system does not split 32 bit read nor write operation
>
> I really, really don't like such assumptions in Subversion code. APR
> and OS already provides functions for proper inter process
> manipulations and we must use them, instead of saving several cycles.
Just stumbling over this debate. Besides the existence of CPU caches and no
synchronizing between them (or I'm just missing it) - isn't that even
relying on undefined/unspecified behaviour, since hit_count is unsigned?
That code might just get optimized away.
nd
--
>kann mir jemand sagen, was genau @-Domains sind?
Ein Mythos. Ein Werbetrick. Verarsche. Nenn es wie du willst...
-- Alexandra Buss und Björn Höhrmann in dciwam
Received on 2014-02-13 21:33:02 CET