동기화 5

#079_닷넷(.NET)_.Net Framework 기본 - Thread 생성 & 동기화

안녕하세요 삽잡이입니다. 이전 시간까지 비동기 대리자를 통해서우리가 제어할 수 없는... 쓰레드를 경험해봤습니다.그런데, 이번에는 사용자가 실제로 쓰레드를 생성해보는 시간을 가져보려고합니다. 닷넷에서 제공해주는 Threading 네임 스페이스는 멀티스레드 응용 프로그램을 직접 만들 수 있게 해주는 다양한 타입을 제공해줍니다. 몇가지 특성에 대해서 간략하게 알아보자면,Interlocked 라는 타입은 원자적인 연산을 지원해줍니다.그리고 Monitor가 있는데,해당 타입이 가장 많이 동기화를 수행할 때 사용하는 타입입니다. Threading 네임 스페이스 중에서도,Thread 클래스에서는 Sleep 메서드를 많이 사용합니다.이는 정적 메서드지요. 그리고 인스턴스 수준에서는 IsBackground 인스턴스를 ..

#025_WIndow_System_커널 모드 동기화 객체_이벤트

안녕하세요 삽잡이입니다. 이번 시간에는 커널 모드 동기화 객체 중에 이벤트에 대해서 알아보려고 합니다. 이벤트는 다른 동기화 오브젝트와 동작방식 자체가 좀 다릅니다.지금까지 사용했던 동기화 객체들은 데이터 보호에 사용이 되었던 것이고,이벤트는 일반적으로 순서 제어에 사용됩니다.즉, 내가 원하는 시점에 그 이벤트가 신호 상태가 되도록 만드려는 매커니즘에 많이 사용됩니다. 이벤트는 '어떤 사건', '어떤 신호'를 말합니다.어떤 사건이 주어지면 신호 상태로 바꾸는 메커니즘이라는 것입니다.이벤트도 커널 오브젝트이기 때문에 신호, 비신호 상태를 가집니다. 이벤트에는 두 가지 종류가 있습니다. 바로 수동 이벤트와 자동 이벤트입니다. 우선 이벤트를 생성하기 위한 함수입니다.수동 이벤트와 자동 이벤트를 결정하는 인자는..

#024_WIndow_System_커널 모드 동기화 객체_세마포어

안녕하세요 삽잡이입니다. 이번 시간에는 커널 모드 동기화 객체중 세마포어에 대해서 알아보려고 합니다. 매개변수로는 다른 커널 오브젝트들과 같이 처음에는 속성을 받습니다.그 다음으로는 자원의 개수들을 할당 받습니다.그러니까... 두번째 인자로는 사용가능한 자원의 개수, 그 다음으로는 최대 자원의 개수마지막 인자로는 세마포어의 이름을 인자로 받습니다. 키를 쥐고 있다가, 필요가 없어지면 반환을 해야하듯이,세마포어에서는 ReleaseSemaphore 함수를 사용합니다. 키를 반환하면 카운트를 증가시킵니다.즉, CreateSemaphore 에서 생성한 키의 개수를 사용한 다음에 다시 반납하니 숫자를 증가 시키겠죠... 뭔말이냐하면... 세마포어는 소유 개념이 없습니다.즉, 뮤텍스와 조금 개념이 다르다는 것입니다..

#022_WIndow_System_유저모드 동기화 객체

안녕하세요 삽잡이입니다. 지난시간까지 동기화에 대해서 정의를 해봤습니다.그렇다면 이제는 동기화 기법에 대해서 살펴볼 시간이 찾아왔다는 것입니다... 동기화에는 '유저 모드 영역'과 '커널 모드 영역' 이 두 가지 종류의 동기화 객체들이 있습니다.우선, 유저 모드 동기화 기법을 살펴보도록 하겠습니다. 첫번째로, Critical Section을 살펴보도록 하겠습니다.Critical Section은 임계영역이라고 부릅니다. 그리고 이 임계영역은 필요한 곳에 설치를 해야합니다.즉, 어떤 작업이 완료될 때 까지 다른 놈들이 오는 것을 막는 문을 설치하는 것입니다. 문을 설치했다면, 그 문을 열쇠만 있을 경우 열 수 있도록, 키를 생성해야합니다.CRITICAL_SECTION 구조체를 통해서 말입니다. 그리고, In..

#021_WIndow_System_쓰레드 동기화

안녕하세요 삽잡이입니다. 지난 시간에 멀티 쓰레드들이 공유 메모리를 접근할 때발생하는 문제점을 어떻게 해결할지에 대해서 생각해보는 시간을 가졌었습니다. 이번 시간에는 동기화에 대해서 알아보도록 하겠습니다.지난시간의 예시를 잠깐 살펴보도록 하겠습니다. 다수의 쓰레드가 있을 때 A라는 쓰레드는 Write 중이고,다른 쓰레드들이 Read 중이라고 가정해보겠습니다. 이때 공유하고 있던 메모리가 수정이 되는 일이 발생함으로, 쓰레드들은 자신이 모르는 사이에 데이터가 변경됨으로 혼란이 옵니다.따라서 Memory Fault가 발생되는데,이를 해결하기 위해 서로 데이터가 호환 가능하도록 해야합니다.이를 우리는 동기화라고 부르게 되는 것입니다.쓰레드에서는 공유 변수, 공유 메모리, 공유 데이터에 대한 동기화 부분이 가장..