C#의 lock 문

Muhammad Maisam Abbas 2023년10월12일
C#의 lock 문

이 자습서에서는 C#의lock문에 대해 설명합니다.

C#의lock

lock(obj)는 다음 코드 섹션에 액세스 할 수 없음을 지정합니다. C#에서 동시에 둘 이상의 스레드. lock(obj)문 내의obj매개 변수는object클래스의 인스턴스입니다. lock(obj)문은 C#에서 스레드를 관리하는 효율적인 방법을 제공합니다. lock(obj)내부의 코드가 한 스레드에 의해 액세스되고 다른 스레드가 동일한 코드에 액세스하려는 경우 두 번째 스레드는 첫 번째 스레드가이를 실행하기를 기다려야합니다. lock(obj)문은 지정된 코드 섹션의 순차적 실행을 보장합니다. 이 현상을 설명하기 위해 먼저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();
    }
  }
}

출력:

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

보시다시피 스레드firstthreadsecondthread는 모두 루프 내부의 코드에 무작위로 액세스합니다. 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();
    }
  }
}

출력:

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

이번에는 루프 내부의 코드가firstthreadsecondthread모두에 의해 순차적으로 액세스됩니다. 데이터 손실을 방지하기 위해lock(obj)문 안에 변수 값을 변경하는 코드를 배치 할 수 있습니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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

관련 문장 - Csharp Thread