[Pharo-dev] Lock-free Atomic Counter ?

Levente Uzonyi leves at elte.hu
Thu Apr 3 09:08:56 EDT 2014


On Thu, 3 Apr 2014, Igor Stasenko wrote:

> 
> 
> 
> On 3 April 2014 00:11, Sven Van Caekenberghe <sven at stfx.eu> wrote:
>       Hi,
>
>       Is it possible to have a simple lock-free atomic counter in Pharo 3.0 ?
>
>       nextId
>         ^ idCounter := idCounter + 1
>
>       Or is it still possible that two process entering this code can mess things up ?
> 
> #+ is a message send. So technically, if you will be interrupted at the point of

If #+ is compiled to bytecode 176, and both the receiver and the argument 
are SmallIntegers, then it's not a message send, so the operation is 
atomic.


Levente

> returning a result from it, then somebody else could run #nextId without notice,
> as result you will get 2 processes returning same value from #nextId.
> (and increasing numbers of concurrent processes will produce even more surprising results :)
>  
>       I vaguely remember a discussion about that long ago...
> 
> assignment is atomic.. the one which i use in atomic queue impl., but it is hidden, undocumented VM implementation detail :) e.g.:
> 
> oldA := a.
> a := newA.
> ..
> actually can be any series of it, as long as nothing else there (no message sends)
> 
> x:= a.
> y:=b.
> z := c.
> w := e.
> 
> will be performed atomically.
> 
>  
>       TIA,
>
>       Sven
> 
> 
> 
> 
> --
> Best regards,
> Igor Stasenko.
> 
>


More information about the Pharo-dev mailing list