Safe semantics are defined formally in Lamport's "On Interprocess Communication" Distributed Computing 1, 2 (1986), 77-101. (Also appeared as SRC Research Report 8).
Safe semantics are defined for a variable with a single writer but multiple readers. These semantics are weak: they only guarantee that there is a total ordering of the writes and that a read which is not concurrent with any write will return the latest value. If a write is concurrent with the read then any value can be returned (for example, if a variable had value 5 and was being changed to 6 during the read, the read function could return 8). The only exception is that values which could not be held by the variable must not be returned, For example, if the variable can hold values between 0 and 255 then the read function must never return 257.
see also: Regular semantics and Atomic semantics