C#의 스레드 허용 목록

Muhammad Maisam Abbas 2024년2월16일
  1. C#에서ConcurrentBag클래스를 사용한 스레드 허용 목록
  2. C#에서ConcurrentQueue클래스를 사용하는 스레드 허용 목록
  3. C#에서SynchronizedCollection클래스가있는 스레드 허용 목록
C#의 스레드 허용 목록

이 자습서에서는 C#에서 스레드로부터 안전한 목록을 만드는 방법을 소개합니다.

C#에서ConcurrentBag클래스를 사용한 스레드 허용 목록

ConcurrentBag클래스는 C#에서 스레드로부터 안전하고 정렬되지 않은 데이터 컬렉션을 만드는 데 사용됩니다. ConcurrentBag클래스는 C#의List와 매우 유사하며 C#에서 스레드로부터 안전한 목록으로 사용할 수 있습니다. ConcurrentBag클래스를 사용하려면 프로젝트에서 System.Collections.Concurrent네임 스페이스를 가져와야합니다. 여러 스레드가 동시에ConcurrentBag개체에 액세스 할 수 있지만ConcurrentBag개체 내부의 내용은 동기식으로 만 수정할 수 있습니다. 동시 작업을 위해 다중 스레드와 함께 사용할 수 있고 우발적 인 데이터 손실로부터 안전합니다. 다음 코드 예제는 C#에서ConcurrentBag클래스를 사용하여 스레드로부터 안전한 목록을 만드는 방법을 보여줍니다.

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;

namespace thread_safe_list {
  class Program {
    static void Main(string[] args) {
      ConcurrentBag<int> numbers = new ConcurrentBag<int>();
      numbers.Add(0);
      numbers.Add(1);
      numbers.Add(2);
      numbers.Add(3);
      numbers.Add(4);
      numbers.Add(5);
      Console.WriteLine("ConcurrentBag");
      foreach (var number in numbers) {
        Console.WriteLine(number);
      }
      List<int> nums = new List<int>();
      nums.Add(0);
      nums.Add(1);
      nums.Add(2);
      nums.Add(3);
      nums.Add(4);
      nums.Add(5);
      Console.WriteLine("List");
      foreach (var number in nums) {
        Console.WriteLine(number);
      }
    }
  }
}

출력:

ConcurrentBag
5
4
3
2
1
0
List
0
1
2
3
4
5

위 코드에서 C#의ConcurrentBag클래스를 사용하여 스레드로부터 안전한 목록을 만들었습니다. 새 요소Add()를 추가하는 함수는ConcurrentBagList데이터 구조 모두에서 동일합니다. 유일한 차이점은List는 선입 선출 (FIFO) 원칙에 따라 작동하고ConcurrentBag는 후입 선출 (LIFO) 원칙에 따라 작동한다는 것입니다. 이 문제는 아래 코드 예제에서 해결됩니다.

C#에서ConcurrentQueue클래스를 사용하는 스레드 허용 목록

ConcurrentQueue클래스는 C#에서 스레드로부터 안전한 큐 데이터 구조를 만드는 데 사용됩니다. ConcurrentQueue는 C#의List처럼 선입 선출 원칙에 따라 작동합니다. List객체 대신ConcurrentQueue객체를 사용하여 스레드로부터 안전한 데이터 구조를 만들 수 있습니다. 다음 예제 코드를 참조하십시오.

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;

namespace thread_safe_list {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Concurrent Queue");
      ConcurrentQueue<int> numbers = new ConcurrentQueue<int>();
      numbers.Enqueue(0);
      numbers.Enqueue(1);
      numbers.Enqueue(2);
      numbers.Enqueue(3);
      numbers.Enqueue(4);
      numbers.Enqueue(5);
      foreach (var number in numbers) {
        Console.WriteLine(number);
      }
      Console.WriteLine("List");
      List<int> nums = new List<int>();
      nums.Add(0);
      nums.Add(1);
      nums.Add(2);
      nums.Add(3);
      nums.Add(4);
      nums.Add(5);
      foreach (var number in nums) {
        Console.WriteLine(number);
      }
    }
  }
}

출력:

Concurrent Queue
0
1
2
3
4
5
List
0
1
2
3
4
5

위 코드에서 C#의ConcurrentQueue클래스를 사용하여 스레드로부터 안전한 List 데이터 구조를 만들었습니다. ListConcurrentQueue데이터 구조에서 사용 가능한 메소드 간에는 몇 가지 차이점이 있습니다. 예를 들어,List데이터 구조에 새 요소를 추가하는 방법은Add()입니다. 반대로ConcurrentQueue데이터 구조에 새 요소를 추가하는 방법은 C#의 기존Queue데이터 구조와 같은Enqueue()입니다. ConcurrentQueue데이터 구조의 이러한 단점은 다음 예제에서 해결됩니다.

C#에서SynchronizedCollection클래스가있는 스레드 허용 목록

SynchronizedCollection클래스는 C#에서 지정된 유형의 개체에 대한 스레드로부터 안전한 컬렉션을 만드는 데 사용됩니다. SynchronizedCollection데이터 구조는 C#의List데이터 구조와 매우 유사합니다. 두 데이터 구조 모두 선입 선출 원칙에 따라 작동합니다. SynchronizedCollectionList데이터 구조 모두에 새 요소를 추가하는 함수는Add()입니다. 다음 예를 참조하십시오.

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;

namespace thread_safe_list {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Synchronized Collection");
      SynchronizedCollection<int> numbers = new SynchronizedCollection<int>();
      numbers.Add(0);
      numbers.Add(1);
      numbers.Add(2);
      numbers.Add(3);
      numbers.Add(4);
      numbers.Add(5);
      foreach (var number in numbers) {
        Console.WriteLine(number);
      }
      Console.WriteLine("List");
      List<int> nums = new List<int>();
      nums.Add(0);
      nums.Add(1);
      nums.Add(2);
      nums.Add(3);
      nums.Add(4);
      nums.Add(5);
      foreach (var number in nums) {
        Console.WriteLine(number);
      }
    }
  }
}

출력:

Synchronized Collection
0
1
2
3
4
5
List
0
1
2
3
4
5

위 코드에서는 C#의SynchronizedCollection클래스를 사용하여 스레드로부터 안전한 목록을 만들었습니다. 지금까지이 접근 방식은 동일한 FIFO 원칙을 따르고 동일한 메서드를 포함하므로 C#에서 목록 데이터 구조의 기능을 구현하는 다른 두 가지 접근 방식 중에서 가장 좋습니다.

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

관련 문장 - Csharp List