C#의 스레드 허용 목록
-
C#에서
ConcurrentBag
클래스를 사용한 스레드 허용 목록 -
C#에서
ConcurrentQueue
클래스를 사용하는 스레드 허용 목록 -
C#에서
SynchronizedCollection
클래스가있는 스레드 허용 목록
이 자습서에서는 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()
를 추가하는 함수는ConcurrentBag
및List
데이터 구조 모두에서 동일합니다. 유일한 차이점은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 데이터 구조를 만들었습니다. List
및ConcurrentQueue
데이터 구조에서 사용 가능한 메소드 간에는 몇 가지 차이점이 있습니다. 예를 들어,List
데이터 구조에 새 요소를 추가하는 방법은Add()
입니다. 반대로ConcurrentQueue
데이터 구조에 새 요소를 추가하는 방법은 C#의 기존Queue
데이터 구조와 같은Enqueue()
입니다. ConcurrentQueue
데이터 구조의 이러한 단점은 다음 예제에서 해결됩니다.
C#에서SynchronizedCollection
클래스가있는 스레드 허용 목록
SynchronizedCollection
클래스는 C#에서 지정된 유형의 개체에 대한 스레드로부터 안전한 컬렉션을 만드는 데 사용됩니다. SynchronizedCollection
데이터 구조는 C#의List
데이터 구조와 매우 유사합니다. 두 데이터 구조 모두 선입 선출 원칙에 따라 작동합니다. SynchronizedCollection
및List
데이터 구조 모두에 새 요소를 추가하는 함수는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#에서 목록 데이터 구조의 기능을 구현하는 다른 두 가지 접근 방식 중에서 가장 좋습니다.
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