He estado preguntando a mí mismo: "¿Por qué usar la cerradura a una sola declaración" ...bloqueando solo 1 operación?
(en mi humilde opinión - si su operación sólo 1 como una misión - por lo que no debería ser un problema ..)?
entonces vi esto:
Como regla básica, que necesita para bloquear todo acceso a cualquier permiso de escritura compartida campo. Incluso en el caso más simple, una operación de asignación en un solo campo , debe tener en cuenta la sincronización. En la clase siguiente, ni el incremento ni el método de asignación es seguro para subprocesos:
class ThreadUnsafe
{
static int _x;
static void Increment() { _x++; }
static void Assign() { _x = 123; }
}
¿Puede usted decirme por qué esto no es hilo de seguridad? he estado ejecutando muchos scripts en mi cabeza y no pude encontrar ningún problema ...
"Una operación" suele ser "unas pocas operaciones". Observe el desmontaje al depurar para ver el ensamblaje de su código y comprobar si realmente se trata de una operación. Si es así, no es necesario bloquearlo, obviamente. Aunque no veo por qué alguna vez tendrá que bloquear una operación, lógicamente. – SimpleVar
'Incremento' no es seguro (3 operaciones). 'Assign' tampoco es seguro (1 operación atómica, pero debe tener en cuenta la sincronización de memoria a través de cachés). –
@Soohjun Incremento es una operación atómica (INC dword ptr [ebp-3Ch]) – SimpleVar