Hello, If the operator is atomic that means if another thread (I am talking about native threads) interacts with the same portion of memory than the active thread its operation will be done after of before. This is a step toward a multithreaded VM with lock free algorithms and is different from just having a user interrupt or a process switch. #become: or the multiple assignments you showed are done in several cpu instructions hence another thread can manipulate the same memory while the operation is performed, which is not atomic.
Hence, the way I understand it is that the operation :=: is done in 1 cpu instruction. Sebastián has to change the bytecode compiler, the JIT and the interpreter to support that. That cannot be done with any variable, but it may be possible to implement :=: for at least 2 temporaries using the cpu swap. There is still a long way to go to have a multithreaded VM with lock-free algorithms, but one has to start somewhere I guess. I am not expert in concurrent programming but atomic swap or test and set operations are probably the way to go. Cheers, Clement 2015-10-12 14:12 GMT+02:00 Max Leske <[email protected]>: > > On 12 Oct 2015, at 13:53, Sebastián Krynski <[email protected]> wrote: > > Hello my name is Sebastián Krynski from Buenos Aires, Argentina. > > > Hi Sebastián, welcome! > > Just writing to let you know that I'm starting to work on adding an atomic > swap operator in Pharo , guaranteed not to be interrupted by the VM. The > operator will be used this way: > > a :=: b > > meaning 'swap variable a with variable b'. > In order to do this I will be modifying the VM and the Compiler . > > > Sound cool! But isn’t that the same as > > a become: b > > ? I even think that > > tmp := a. > a := b. > b := tmp > > is equivalent, since the VM only interrupts message sends, and in this > case only byte code would be generated? > > That’s not my area of expertise, so please correct me. > > Cheers, > Max > > > I'm working under the direction of INRIA and Gabriela Arévalo. > > >
