Instrução block em C#
Neste tutorial, discutiremos a instrução lock
em C#.
a instrução lock
em C#
A instrução lock(obj)
especifica que a seção de código a seguir não pode ser acessada por mais de um thread ao mesmo tempo em C#. O parâmetro obj
dentro da instrução lock(obj)
é uma instância da classe object
. A instrução lock(obj)
fornece uma maneira eficiente de gerenciar threads em C#. Se o código dentro do lock(obj)
for acessado por uma thread e outra thread quiser acessar o mesmo código, a segunda thread terá que esperar pela primeira thread para executá-lo. A instrução lock(obj)
garante a execução sequencial da seção de código especificada. Para demonstrar esse fenômeno, primeiro mostraremos o resultado do código sem qualquer gerenciamento de thread com a instrução 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();
}
}
}
Resultado:
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, os threads firstthread
e secondthread
acessam o código dentro do loop aleatoriamente. Mostraremos o resultado do código com gerenciamento de thread com a instrução 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();
}
}
}
Resultado:
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
Desta vez, o código dentro do loop é acessado sequencialmente por firstthread
e secondthread
. Podemos colocar o código no qual alteramos o valor de uma variável dentro de uma instrução lock(obj)
para evitar qualquer perda de dados.
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