Hola Manuel, gracias por la respuesta.
Entiendo que la "Función" testAndSet(lock) se ejecute de manera atómica. El caso que me genera duda es cuando fuera del testAndSet(lock) se hace lock:=False, esa instrucción por si sola no está protegiendo su memoria, entonces en el caso de que la asignación tenga varias instrucciones de procesador, puede pasar que ese proceso sea bloqueado en el medio de la instrucción lock:=False, y otro proceso que use la misma variable se ejecute (tal vez tenga un testAndWait) entonces la varible puede no quedar consistente.
Entiendo que la "Función" testAndSet(lock) se ejecute de manera atómica. El caso que me genera duda es cuando fuera del testAndSet(lock) se hace lock:=False, esa instrucción por si sola no está protegiendo su memoria, entonces en el caso de que la asignación tenga varias instrucciones de procesador, puede pasar que ese proceso sea bloqueado en el medio de la instrucción lock:=False, y otro proceso que use la misma variable se ejecute (tal vez tenga un testAndWait) entonces la varible puede no quedar consistente.