U E D R , A S I H C RSS

5�용C++스터디/멀티쓰레드

  • 발표ì—� ê¼­ 들어가야 í•  것들
    • 프로세스가 무엇ì�¸ê°€?
    • 쓰레드가 무엇ì�¸ê°€?
    • 멀티쓰레드를 어떻게 사용하나?
    • 쓰레드 ë�™ê¸°í™”ê°€ 무엇ì�¸ê°€?
    • í�¬ë¦¬í‹°ì»¬ì„¹ì…˜ì�´ 무엇ì�¸ê°€?
    • í�¬ë¦¬í‹°ì»¬ì„¹ì…˜ì�„ 어떻게 사용하나?

스레드

스레드란 무엇�가? 실제로 �한다면 하나� 작업� 단위를 스레드�고 할수 있습니다. 윈�98는 멀티 테스킹� 가능한 프로그램입니다. 즉 한 번� 여러 작업� 할수 있다는 것입니다. CPU �체는 한스�� 한 개� 작업밖�는 하지 못합니다. 그렇다면 어떻게 윈�95는 멀티테스킹� 가능할까요? 바로 시간 분할입니다. CPU� 처리 ��가 1초� 99개� 작업 한다고 가정� 합시다. 그리고 현재 A,B,C 3개� 프로그램� �작중��고 예를 들어본다면 1초� CPU는 A� 해당하는 작업 33개 B� 해당하는작업 33개 C� 해당하는 작업 33개로 나누어서 작업� 합니다.
ì�´ë ‡ê²Œ 작업ì�„ 함으로ì�¨ 작업ì�„ 멀티 테스킹으로 할수 있다ë�¼ëŠ” ì�˜ë¯¸ìž…니다. ì�´ë•Œ 하나ì�˜ 작업 단위들ì�„ 스레드ë�¼ê³  합니다. "그럼 프로그램 ë‚´ë¶€ì—� 모든 작업ì�€ 스레드로 나누어 지겠네요?" ë�¼ëŠ” 질문ì�´ 있ì�„ 것 ê°™ì�€ë�° 그렇지는 않습니다. 스레드란 ë�…립ì �ì�¸ 작업 단위입니다. 즉 다른것ì—� 구애 받지않는 ìž�ì²´ì �ì�¸ 작업 단위를 스레드ë�¼ê³  합니다. 윈ë�„ì—�서 워드 프로세서를 ë�„ìš°ê³  대용량ì�˜ ë�°ì�´í„°ë¥¼ 로드하여 프린터로 ìœë ¥í•œë‹¤ê³  가정ì�„ 합시다. 프린팅 작업 ë�„중ì—� 워드프로세서를 사용할수 있습니까? 물론 윈ë�„ 95ì—�서는 프린터는 프린터 대로 ìž‘ë�™ì�„ 하고 워드 프로세서는 워드 프로세서대로 작업ì�„ 할수 있습니다. 여기ì—� ì�¸í„°ë„·ì�„ 통해서 í�° ë�°ì�´í„°ë¥¼ 다운 받는다고 가정ì�„ 합시다. 프린터하고 ì›�드프로세서로 새로운 ë‚´ìš©ì�„ 입력하면서 ì�¸í„°ë„·ì�„ 통해서 ë�°ì�´í„°ë¥¼ 다운 ë°›ì�„수 있습니다? 물론 할수 있습니다. 여기ì—�서 ì›�드프로세서ì�˜ 입력작업ì�´ 하나ì�˜ 스레드 프린팅 작업ì�´ 하나ì�˜ 스레드 ë˜�한 다운 로드가 ë˜�하나ì�˜ 스레드입니다. 실지로 윈ë�„ 98ì�˜ ë‚´ë¶€ì �ì�¸ 모든 프로그램ì�˜ ë�™ìž‘ì�€ 멀티 스레드로 설정ë�˜ì–´ 있습니다. 그렇기 때문ì—� 다중 작업ì�„ 할수 있는 것입니다.
프로그램 작성하다 보면 프로그램 수행�중 현재 프로그램� 다른 작업� 수행하면서 �하나� 작업� 수행하고� 할 때가 있� 것입니다. �때 사용하는 것� 바로 스레드 입니다. 작업� 함수로 프로그래�� 하고 난후� �것� 스레드로 형태로 실행하면 �니다

스레드 �기화

스레드� �기화
스레드를 �기화 시키는 것� �당히 어려운 작업중� 하나입니다. 아주 작� 실수만 하��� 프로그램� ��과는 전혀 다른 방향으로 �러가고 맙니다. �한 여러개� 스레드를 �시� 디버깅 한다는 것� 쉬운�� 아닙니다. 그러나 다해�� VC는 기본�으로 �기화가 잘 � 프로그램� 제공합니다. 작� 단위� �� 하는 중간� �신� 작업� 다른 스레드로 �기는 �� 별로 없다는 �야기입니다. 여기�서는 스레드� �기화� 대한 맛보기 정�로만 소개합니다.
프로그램� 수행� 때 한 개� ��터를 �시� � 개� 프로그램� 핸들�할경우가 있습니다. 예를 들어 (a)�는 파�� A프로그램� ��터를 입력,수정하고 B�는 ��터는 ��터를 검색합니다. B가 �고� 하는 시��서 A�는 프로그램� 그��터를 수정하고� 한다면 여기�서 문제가 발��니다. A가 수정한 후� B가 �게 할것�가? 아니면 B가 �고 난후� A�는 ��터가 수정� 하게 할것�가? �런 문제�� �시성� 가진 운�체제�서 해결해야할 중요한 항목입니다.
A스레드와 B스레드가 ë�™ì‹œì—� 진행하다가 특정 사건ì�´ ë°œìƒ�ë�˜ì—ˆì�„ 경우 ì�´ë•Œ B스레드는 Cë�¼ëŠ” 결과가 오기 전까지는 스레드 ë�™ìž‘ì�„ 중지 해야 합니다. ë§Œì�¼ 중지하지 않고 현재ì�˜ 스레드를 계ì†�ì �으로 ì§„í–‰ì�„ 시킨다면 í�° 문제ì �ì�´ 나타날것입니다. Bì�˜ ìƒ�태와 Cê°€ ìƒ�ê°�하는 Bì�˜ ìƒ�태가 같아야 합니다. ì�´ë ‡ê²Œ 같게 맟추는 것ì�„ ë�™ê¸°í™” ë�¼ê³  합니다.
MFC�서는 다�� 6가지 �래스를 멀티쓰레딩� 위해서 제공합니다.
�기 �래스� CSyncObject, CSemaphore, CMutex, CCriticalSection, CEvent와 �기화� 접근� 허용하는 CMultiLock과 CSingleLock� 그것�니다.
�중 CSyncObject는 CSemaphore, CMutex, CCriticalSection, CEvent� �위 �래스로서 �접 사용하지는 않습니다.


�기화는 멀티 쓰레드 프로그래��서 고전�� 문제�다.

��하는 것과 �사하는 것, � 가지 �만 하는 철학� 다섯 명� 있다. �들 철학� 사�� 하나씩� 스틱� 놓여 있다. �사 를 하려면 양쪽� 스틱� 모� 가져야만 한다.
만약 모든 철학�가 오른쪽� 스틱� 잡고 있고 왼쪽� 스틱� 기다린다면 문제가 발�한다. 그들� 아무� 왼쪽 스틱� 얻� 수 없으므로 모� 굶어죽게 �다. 물론 철학�들� 모� 사기를 칠 줄 모르며 먹는 양� 모� 같다고 가정한다. �런 �태를 � 드���고 한다. �드�� 방지하려면 어떻게 해야 할까? � 애플릿�서는 다섯 개� 스틱 중 하나를 표시하여 표시� 스틱� 잡� 경우 반드시 내려놓고 다른 스틱� 시�하�� 하고 있다. �렇게 하면 위와 같� �드� �황� 발�하기 전� 표시� 스 틱� 왼쪽 철학�는 오른쪽� 표시� 스틱� 내려놓고 왼쪽 스틱� 기다리게 �므로 표시� 스틱� 오른쪽 철학�가 왼쪽 스틱� 얻� 수 있게 �다.

스레드 �기화 (Thread Synchronization) (2)


  • ê±°ì�˜ ë�™ì‹œì—� ì�¼ì–´ë‚˜ëŠ” ì�¼ì�´ì§€ë§Œ 순서가 있는 작업ì�„ 수행 í•  때 스레드들ì�˜ 수행순서를 정해주는 것

    - ex)) 통신프로그램 작성시, 전송받� ��터를 화면� 보여주는 �련� 작업� 반드시 ��터를 전송받� 후� 수행�어야 함 (�기화� 필요성)

멀티 태스킹� 개�

  • 프로그램ì�´ 로딩ë�˜ì–´, 메모리 ìƒ�ì—�서 실행ë�˜ê³  있는 ìƒ�태를 프로세스(process) 혹ì�€ 태스í�¬(task)ë�¼ 한다.
    윈�우는 멀티태스킹 시스탬�다. 즉, 여러 개� 프로세스를 �시� 실행시킬 수 있는 시스템 능력� 가지고 있다. 멀티태스킹� 실제�으로 여러 개� 프로세스가 �시� 실행�는 것� 아니�, 아주 짧� 시간� 여러 조�으로 나누어 마치 �시� 실행�는 것처럼 보�는 것�다.


�리티칼 섹션(Critical Section)

반복�으로 �작하는 � 개 ��� 스레드가 하나� 리소스를 공유하려고 할 때, �시� 리소스� 접근하지 못하�� 하기 위하여 �리티칼 섹션� 사용한다.

Critical Section of Code í�¬ë¦¬í‹°ì»¬ 섹션 ë˜�는 í�¬ë¦¬í‹°ì»¬ 리젼ì�´ë�¼ 불리우는 ì�´ 부분ì�€ 커ë„�ê³¼ 관련ë�œ 중요 부분ì—�서 ì�¸í„°ëŸ½íŠ¸ë¡œ ì�¸í•œ 커ë„�ì�˜ ì†�ìƒ�ì�„ 막기 위해 불리우는 ê³³ì�´ë©° ë˜�한 수행시간ì�˜ 단ì•ì�´ 절대ì �으로 필요한 부분ì—�서 ì“°ì�´ëŠ” 구간ì�´ë‹¤. ì�´ëŠ” 코드와 ìž�ì›�ì�˜ 공유를 막고 배타ì �ì�¸ 공간으로 설정ë�œë‹¤.

OS�서 공유���나 특정코드가 수행�는 �중� 다른 프로세스� �해 interrupt �는것� 방지하기 위해 �리티컬 섹션� 사용하게 �다. �는 윈�우즈 프로그래��서 스레드관련 처리를 해 줄 때�� 나오는 용어�다.



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:18
Processing time 0.0079 sec