In general, the Threads library guarantees that assignments to slots and variables are atomic. That is, after an assignment, but before synchronization, another thread will see either the old value or the new value of the location. There is no possibility of seeing a half-way state.
In some circumstances, when a slot or a variable is specialized to be of a particularly constrained type, the Threads library does not guarantee atomicity of assignments. Such a type may include a subtype of <double-float> or a subtype of <extended-float>. It may not include any other type that is either defined in the current specification of the Dylan language, or that could be created from standard facilities provided by the current specification of the language. This restriction of the atomicity guarantee is intended to permit implementations to represent the values of such slots or variables in a form which uses more space than a normal Dylan value, for optimal efficiency.
For those cases where the implementation does not provide the atomicity guarantee, the results of accessing a normal variable are undefined if:
Two memory references proceed in parallel if they are not explicitly sequentialized, either by being in a single thread, or by explicit inter-thread synchronization.
Programmers should guard against the possibility of undefined values by using explicit inter-thread synchronization.