Declaración de lock en C#
En este tutorial, discutiremos la declaración lock
en C#.
La declaración lock
en C#
La declaración lock(obj)
especifica que no se puede acceder a la siguiente sección de código por más de un subproceso al mismo tiempo en C#. El parámetro obj
dentro de la instrucción lock(obj)
es una instancia de la clase object
. La declaración lock(obj)
proporciona una forma eficiente de administrar subprocesos en C#. Si un hilo accede al código dentro del lock(obj)
y otro hilo quiere acceder al mismo código, el segundo hilo tendrá que esperar a que el primer hilo lo ejecute. La declaración lock(obj)
asegura la ejecución secuencial de la sección de código especificada. Para demostrar este fenómeno, primero le mostraremos el resultado del código sin ninguna gestión de subprocesos con la declaración lock(obj)
.
using System;
using System.Threading;
namespace lock_statement {
class Program {
static readonly object lockname = new object();
static void display() {
for (int a = 1; a <= 3; a++) {
Console.WriteLine("The value to be printed is: {0}", a);
}
}
static void Main(string[] args) {
Thread firstthread = new Thread(display);
Thread secondthread = new Thread(display);
firstthread.Start();
secondthread.Start();
}
}
}
Producción :
The value to be printed is: 1
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
The value to be printed is: 2
The value to be printed is: 3
Como podemos ver, los hilos firstthread
y secondthread
acceden al código dentro del bucle de forma aleatoria. Le mostraremos el resultado del código con la gestión de subprocesos con la declaración lock(obj)
.
using System;
using System.Threading;
namespace lock_statement {
class Program {
static readonly object lockname = new object();
static void display() {
lock (lockname) {
for (int a = 1; a <= 3; a++) {
Console.WriteLine("The value to be printed is: {0}", a);
}
}
}
static void Main(string[] args) {
Thread firstthread = new Thread(display);
Thread secondthread = new Thread(display);
firstthread.Start();
secondthread.Start();
}
}
}
Producción :
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
Esta vez, tanto firstthread
como secondthread
acceden secuencialmente al código dentro del bucle. Podemos colocar un código en el que cambiamos el valor de una variable dentro de una declaración lock(obj)
para evitar cualquier pérdida de datos.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn