On Mon, 2008-06-23 at 20:48 +0200, Quintin Beukes wrote:
> Correction, ArrayIndexOutOfBounds exception.
> 
> Eitherway,
> That should work much better. That protects against to much
> synchronization at the cost of possibly not distributing evenly, but
> that risk is so small, and not a big deal.
> 
> At least you never goes out of index here.
> 

My bad. Of course, the overflow of the worker count can lead
to ArrayIndexOutOfBounds, which is not good. I think the fix suggested
by Tatu should be good enough. Alternatively we could just take an
absolute value of this.currentWorker++ % this.workerCount.

Math.abs(this.currentWorker++ % this.workerCount)

This should do the trick I believe.

Oleg


> Q
> 
> On 6/23/08, Tatu Saloranta <[EMAIL PROTECTED]> wrote:
> > --- On Mon, 6/23/08, Quintin Beukes <[EMAIL PROTECTED]> wrote:
> >
> >  ...
> >
> > > One can either modify the the method to either
> >  > (1) Implement a priority queue, which will give a perfect
> >  > distribution.
> >  > (2) Modify the method to do this:
> >  > int i;
> >  > synchronized (this)
> >  > {
> >  >   int i = this.currentWorker++ % this.workerCount;
> >  >   if (i == 0) this.currentWorker = 1;
> >
> >
> > How about rather:
> >
> >  if (++currentWorker < 0) { // overflow
> >   currentWorker = 0;
> >  }
> >  i = currentWorker % workerCount;
> >
> >  if goal is to protect against overflow (which I thought was the goal);
> >  or. I don't think our code helps against overflow itself.
> >  Or if one just wants to iterate over workers:
> >
> >  if (++currentWorker >= workerCount) {
> >   currentWorker = 0;
> >  }
> >  i = currentWorker % workerCount;
> >
> >  I doubt any of these really would make that much difference (including the 
> > original code), but if one wants to be pedantic... :-)
> >
> >
> >  -+ Tatu +-
> >
> >
> >
> >
> >
> >
> >  ---------------------------------------------------------------------
> >  To unsubscribe, e-mail: [EMAIL PROTECTED]
> >  For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to