상세 컨텐츠

본문 제목

멀티 스레드 안전하게 구현하는 방법 - 데이터 동기화...

C#

by 탑~! 2013. 5. 25. 11:00

본문

Thread를 두개를 사용할 경우 하나의 함수를 호출한다고 가정해 보자.
그렇게 되면 다량의 데이터를 효과적으로 여러개의 스레드를 사용해서 처리할 수가 있다.
아래의 예제를 보면 AddItems()를 스레드 두개를 사용해서 처리 되고 있다.
하지만 결과를 보면 100개의 데이터 값만 뿌려지는 것을 알수 있다.

이때 사용하게 되는 것이 lock 구문이다. 이 구문을 사용해서 멀티 스레드에서의 
데이터를 안전하게 처리할 수 있다.
lock 에 포함되는 것은 동기화에 처리되어야 할 데이터를 락을 걸어 주게 되는 것으로
여겨진다.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication4
{
    class Program
    {
        static List<string> list = new List<string>();

        static void Main(string[] args)
        {
            new Thread(AddItems).Start();
            new Thread(AddItems).Start();
        }

        static void AddItems()
        {
            for (int i = 0; i < 100; i++)
                lock (list)
                {
                    string _str = "Item " + list.Count + " ID=" + AppDomain.GetCurrentThreadId();
                    list.Add(_str);
                    Console.WriteLine(_str);
                }
        }
    }
}



출처 : http://www.iamgsi.com/entry/%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8F%99%EA%B8%B0%ED%99%94

관련글 더보기