728x90
Thread에서 안전한 Queue인 ConcurrentQueue의 기본 사용법을 적어본다
1. Queue 선언.
2. 값 삽입.
3. 내용을 한번 확인 해보고,
4. 값 가져오면서 큐 안의 내용을 삭제 한다.
5. 가져오고 난 후의 큐 안의 갯 수를 확인해 보고,
6. 마지막으로 큐 안의 값을 확인 하는 방법을 적어보고
끝~
출처: https://mongyang.tistory.com/117 [웃어라 온 세상이 너와 함께 웃을것이다.]
스레드 안전 ConcurrentQueue 컬렉션 사용
C# ConcurrentQueue는 스레드 세이프 퍼스트 인퍼스트 아웃(FIFO) 컬렉션이다. 다음 예제는 ConcurrentQueue를 사용하여 항목을 enque 및 dequeue하는 방법을 보여준다.
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
class EnqueueDequeuePeek
{
// Demonstrates:
// ConcurrentQueue<T>.Enqueue()
// ConcurrentQueue<T>.TryPeek()
// ConcurrentQueue<T>.TryDequeue()
static void Main()
{
//
// Construct a ConcurrentQueue
ConcurrentQueue<int> cq = new ConcurrentQueue<int>();
//
// Populate the queue.
for (int i = 0; i < 10000; i++)
{
cq.Enqueue(i);
}
//
// Peek at the first element
int result;
if (!cq.TryPeek(out result))
{
System.Console.WriteLine(
"CQ: TryPeek failed when it should have succeeded");
}
else if (result != 0)
{
System.Console.WriteLine(
"CQ: Expected TryPeek result of 0, got {0}", result);
}
//
// An action to consume the ConcurrentQueue
int outerSum = 0;
Action action = () =>
{
int localSum = 0;
int localValue;
while (cq.TryDequeue(out localValue))
{
localSum += localValue;
}
Interlocked.Add(ref outerSum, localSum);
};
//
// Start 4 concurrent consuming actions
Parallel.Invoke(action, action, action, action);
System.Console.WriteLine(
"outerSum = {0}, should be 49995000", outerSum);
}
}
출처 : https://jonlabelle.com/snippets/view/csharp/using-the-thread-safe-concurrentqueue-collection
'개발언어 > C#' 카테고리의 다른 글
[C#] C#에서 멀티스레드에 안전한 구조 설계 (0) | 2021.02.17 |
---|---|
[C#] Queue VS ConcurrentQueue (0) | 2021.02.17 |
[C#] winform 색상표 (0) | 2021.02.05 |
[C#] 리스트뷰 이미지리스트 (0) | 2021.01.20 |
[C#] FolderBrowserDialog 이용하여 폴더 선택 및 정보 가져오기출처: [BeomBeomJoJo - Programmer] (0) | 2021.01.19 |