쓰레드 4

[삽잡이] 원자적인 연산의 중요성

쓰레드는 독립적인 존재입니다.여러개의 쓰레드가 실행한다면, 각기 자유롭게 실행이 될 것입니다.하지만, 쓰레드를 여러대를 사용할 때에는 반드시 신경을 써야할 일이 있습니다.바로, '동기화'입니다. 여러 쓰레드가 열심히 자기 할일을 하고 있는데,하나의 '공유 변수'를 사용하게 될 때 문제가 발생합니다. 예를 들어, A라는 쓰레드가 데이터를 지우고 있는데B와 C라는 쓰레드는 그 사실을 모른채 A가 지운 데이터에 접근하고자하면 어떻게 될까요? 따라서, '원자적(Atomic)인 연산에 의해 공유 메모리는 아주 잘 보호되어야합니다.'원자는 더 이상 나눌 수 없는 최소 단위의 기본 입자를 말하지요...원자적 연산이란, 따악 하나만... 단 하나만 연산하는 것을 말합니다.연산을 수행하면서 그 누군가의 방해도 받지 않고..

#020_WIndow_System_멀티 쓰레드 공유 메모리

안녕하세요 삽잡이입니다.이번 시간에는 쓰레드 동기화에 대해서 알아보려고 합니다. 쓰레드는 각각 독립적으로 움직이기 때문에, 공유 변수에 더욱 주의를 해야합니다.그렇지 않으면 쓰레드에 정말로 많은 문제가 발생하게 됩니다.공유 메모리에 신경쓰지 않게 되어 발생한 오류는동기화와 관련된 문제로써 에러를 찾기 상대적으로 힘들어집니다. 여러개의 독립적인 쓰레드가 하나의 공유 메모리를 사용할 경우를 생각해보겠습니다.만약, 0번째 쓰레드가 Write 중인데 나머지 쓰레드들은 Read를 하고 있다면,메모리가 변경이 되는 것인데, Read를 하던 녀석들은 당황하겠지요...결과적으로 Memory Fault가 발생하는데, 이 문제는 심각한 문제입니다. 강조하지만, 원천적으로 공유 메모리는 쓰레드에서는 문제가 많습니다.하지만,..

#019_WIndow_System_쓰레드(thread) 제어

안녕하세요 삽잡이입니다.이번시간에는 지난 시간에 이어서 쓰레드에 대해 알아보려고합니다. 이전 시간까지 쓰레드를 생성할 때에는 CreateThread() 함수를 실행했습니다. 그런데 이 CreateThread 함수는 API에서 제공하는 함수입니다. Thread를 띄우는 함수에는 위의 함수 외에 _beginthread()함수가 있습니다.둘이 차이는 없지만, 일반적으로 _beginthread()함수를 더 많이 사용한다고 합니다. (믿거나 말거나) CreateThread는 다시 말하지만, API함수입니다.thread는 stack을 제외한 Global Data 영역과 heap 영역을 공유합니다.즉, thread는 static 변수의 내용을 공유한다는 것입니다.그런데 C언어의 런타임 라이브러리를 사용할 때 문제가 ..

#018_WIndow_System_쓰레드(thread) 란?

안녕하세요 삽잡이입니다.이번 시간에는 시스템 프로그래밍을 배우면서 가장 중요한 내용 중 하나!쓰레드에 대해서 알아보도록 하겠습니다. 요즘은 멀티코어 시대로써 여러개의 코어... 그러니까 CPU 자세하게는 연산 장치를 통해 프로그래밍을 할 수 있게 되었습니다. 우선 프로그램이 실행되기 위한 세가지 상태에 대해 알아보도록 하겠습니다.1. Running 상태2. Ready 상태3. Blocking 상태 start를Ready전에, End를 Blocking 후에 실행되게 됩니다.즉, 상태로는 크게 프로그램이 구동되고 실행되는 위의 세가지 상태로 나뉘게 된다는 것입니다. 프로그램이 실행되면 Ready 상태에 놓이게 됩니다.그리고 자기가 실행할 순서가 되면 Running 상태에 놓이게 됩니다.Running 상태에 놓..