From 3c3fc84f77633822bd45c86e6ef809e3897fc527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EC=98=88=EC=A4=80?= <yejoon08@ajou.ac.kr> Date: Tue, 25 Aug 2020 00:36:41 +0900 Subject: [PATCH] =?UTF-8?q?Update=20README.md=5Fthread=20=EB=B3=B4?= =?UTF-8?q?=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- thread/README.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/thread/README.md b/thread/README.md index 0799e59..794f98a 100644 --- a/thread/README.md +++ b/thread/README.md @@ -1,6 +1,63 @@ # thread -## thread 과제 뿌시기 +## 1. thread 뿌시기 + +### process와 thread 차이 +1. process + + * 사전적 의미 + * 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 + * 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 + * 운영체제로부터 시스템 자원을 할당받는 작업의 단위 + * 동적인 개념 : 실행된 프로그램을 의미한다. + + * 예시 : CPU시간, Code, Data, Stack, Heap의 구조로 된 독립된 메모리 영역 + * 특징 + * process는 각각 독립된 영역인 Code, Data, Stack, Heap의 구조를 할당받는다. + * 기본적으로 process 당 최소 1개의 메인 스레드를 가지고 있다. + * 한 process가 다른 process의 자원에 접근하려면 process 간의 통신(IPC)을 사용해야 한다. + + + +2. thread + + * 사전적 의미 + * process 내에서 실행되는 여러 흐름의 단위 + * process의 특정한 수행 경로 + * process가 할당받은 자원을 이용하는 실행의 단위 + + * 특징 + * thread는 process 내에서 각각 stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. + * 기본적으로 process 당 최소 1개의 메인 thread를 가지고 있다. + * 같은 process안에 있는 여러 thread는 heap 공간을 공유하지만, process는 다른 process의 메모리에 접근할 수 없다. + + + +### mutex + +* 사용 이유 + * critical section에 접근할 때, 많은 객체들이 공유자원에 한번에 접근하는 것을 방지하고자 사용하는 도구이다. + +* mutex 사용이 필요한 예시 + * 두 개의 thread가 같은 변수를 같은 시간에 업데이트하려고 할 때, 하나는 0을 1로 변경하려하고, 나머지 하나는 1을 0으로 변경을 + 시도하는 경우, 충돌이 발생할 수 있다. 따라서, 충돌을 방지하기 위해 mutex와 같은 도구가 필요하다. + +* 사용 방법 + * process는 critical section에 들어가기 전에 lock을 하고, 나올 때 unlock을 한다. + * #include <pthread.h> 를 이용하여 pthread_mutex_t 를 통해 사용이 가능하다. + + +``` +pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // thread 초기화 +pthread_mutex_lock(&mutex); // 잠금 +pthread_mutex_unlock(&mutex); //잠금 해제 +int status = pthread_mutex_destroy(*&mutex); //mutex free +``` + +<br> +<br> + +## 2. thread 과제 뿌시기 * thread는 전역변수 메모리는 공유하지만, local 변수는 공유하지 않음을 생각하기 ### 구현방법 @@ -14,4 +71,8 @@ ### 프로그램 이용방법 1. 프로그램을 실행한 후, 30명의 학생들의 점수를 입력한다. -2. 2개의 child thread가 각각 자신의 실행 후, average, sum, sorting된 결과를 출력해준다. \ No newline at end of file +2. 2개의 child thread가 각각 자신의 실행 후, average, sum, sorting된 결과를 출력해준다. + + +### reference +[OS] 프로세스와 스레드의 차이 https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html \ No newline at end of file -- GitLab