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