- 발표ì—� ê¼ ë“¤ì–´ê°€ì•¼ í• ê²ƒë“¤
- 프로세스가 무엇�가?
- ì“°ë ˆë“œê°€ 무엇ì�¸ê°€?
- ë©€í‹°ì“°ë ˆë“œë¥¼ 어떻게 사용하나?
- ì“°ë ˆë“œ ë�™ê¸°í™”ê°€ 무엇ì�¸ê°€?
- �리티컬섹션� 무엇�가?
- �리티컬섹션� 어떻게 사용하나?
- 프로세스가 무엇�가?
ìŠ¤ë ˆë“œ ¶
ìŠ¤ë ˆë“œëž€ 무엇ì�¸ê°€? ì‹¤ì œë¡œ ë§�한다면 하나ì�˜ 작업ì�˜ 단위를 ìŠ¤ë ˆë“œë�¼ê³ í• ìˆ˜ 있습니다. 윈ë�„98는 멀티 테스킹ì�´ 가능한 프로그램입니다. 즉 한 번ì—� 여러 작업ì�„ í• ìˆ˜ 있다는 것입니다. CPU ìž�체는 한스í…�ì—� 한 ê°œì�˜ 작업밖ì—�는 하지 못합니다. ê·¸ë ‡ë‹¤ë©´ 어떻게 윈ë�„95는 멀티테스킹ì�´ ê°€ëŠ¥í• ê¹Œìš”? 바로 시간 ë¶„í• ìž…ë‹ˆë‹¤. CPUì�˜ 처리 ì†�ë�„ê°€ 1ì´ˆì—� 99ê°œì�˜ 작업 í•œë‹¤ê³ ê°€ì •ì�„ 합시다. ê·¸ë¦¬ê³ í˜„ìž¬ A,B,C 3ê°œì�˜ 프로그램ì�´ ë�™ìž‘중ì�´ë�¼ê³ 예를 들어본다면 1ì´ˆì—� CPU는 Aì—� 해당하는 작업 33ê°œ Bì—� 해당하는작업 33ê°œ Cì—� 해당하는 작업 33개로 나누어서 작업ì�„ 합니다.
ì�´ë ‡ê²Œ 작업ì�„ 함으로ì�¨ 작업ì�„ 멀티 테스킹으로 í• ìˆ˜ 있다ë�¼ëŠ” ì�˜ë¯¸ìž…니다. ì�´ë•Œ 하나ì�˜ 작업 단위들ì�„ ìŠ¤ë ˆë“œë�¼ê³ 합니다. "그럼 프로그램 ë‚´ë¶€ì—� ëª¨ë“ ìž‘ì—…ì�€ ìŠ¤ë ˆë“œë¡œ 나누어 ì§€ê² ë„¤ìš”?" ë�¼ëŠ” 질문ì�´ 있ì�„ 것 ê°™ì�€ë�° ê·¸ë ‡ì§€ëŠ” 않습니다. ìŠ¤ë ˆë“œëž€ ë�…립ì �ì�¸ 작업 단위입니다. 즉 다른것ì—� êµ¬ì• ë°›ì§€ì•ŠëŠ” ìž�ì²´ì �ì�¸ 작업 단위를 ìŠ¤ë ˆë“œë�¼ê³ 합니다. 윈ë�„ì—�서 워드 프로세서를 ë�„ìš°ê³ ëŒ€ìš©ëŸ‰ì�˜ ë�°ì�´í„°ë¥¼ 로드하여 프린터로 ì¶œë ¥í•œë‹¤ê³ ê°€ì •ì�„ 합시다. 프린팅 작업 ë�„중ì—� 워드프로세서를 ì‚¬ìš©í• ìˆ˜ 있습니까? ë¬¼ë¡ ìœˆë�„ 95ì—�서는 프린터는 프린터 대로 ìž‘ë�™ì�„ í•˜ê³ ì›Œë“œ 프로세서는 워드 프로세서대로 작업ì�„ í• ìˆ˜ 있습니다. 여기ì—� ì�¸í„°ë„·ì�„ 통해서 í�° ë�°ì�´í„°ë¥¼ 다운 ë°›ëŠ”ë‹¤ê³ ê°€ì •ì�„ 합시다. í”„ë¦°í„°í•˜ê³ ì›�드프로세서로 새로운 ë‚´ìš©ì�„ ìž…ë ¥í•˜ë©´ì„œ ì�¸í„°ë„·ì�„ 통해서 ë�°ì�´í„°ë¥¼ 다운 ë°›ì�„수 있습니다? ë¬¼ë¡ í• ìˆ˜ 있습니다. 여기ì—�서 ì›�드프로세서ì�˜ ìž…ë ¥ìž‘ì—…ì�´ 하나ì�˜ ìŠ¤ë ˆë“œ 프린팅 작업ì�´ 하나ì�˜ ìŠ¤ë ˆë“œ ë˜�한 다운 로드가 ë˜�하나ì�˜ ìŠ¤ë ˆë“œìž…ë‹ˆë‹¤. 실지로 윈ë�„ 98ì�˜ ë‚´ë¶€ì �ì�¸ ëª¨ë“ í”„ë¡œê·¸ëž¨ì�˜ ë�™ìž‘ì�€ 멀티 ìŠ¤ë ˆë“œë¡œ ì„¤ì •ë�˜ì–´ 있습니다. ê·¸ë ‡ê¸° 때문ì—� 다중 작업ì�„ í• ìˆ˜ 있는 것입니다.
프로그램 작성하다 ë³´ë©´ 프로그램 수행ë�„중 현재 프로그램ì�€ 다른 작업ì�„ 수행하면서 ë˜�하나ì�˜ 작업ì�„ ìˆ˜í–‰í•˜ê³ ìž� í• ë•Œê°€ 있ì�„ 것입니다. ì�´ë•Œ 사용하는 것ì�´ 바로 ìŠ¤ë ˆë“œ 입니다. 작업ì�„ 함수로 프로그래ë°�ì�„ í•˜ê³ ë‚œí›„ì—� ì�´ê²ƒì�„ ìŠ¤ë ˆë“œë¡œ 형태로 실행하면 ë�©ë‹ˆë‹¤
ì�´ë ‡ê²Œ 작업ì�„ 함으로ì�¨ 작업ì�„ 멀티 테스킹으로 í• ìˆ˜ 있다ë�¼ëŠ” ì�˜ë¯¸ìž…니다. ì�´ë•Œ 하나ì�˜ 작업 단위들ì�„ ìŠ¤ë ˆë“œë�¼ê³ 합니다. "그럼 프로그램 ë‚´ë¶€ì—� ëª¨ë“ ìž‘ì—…ì�€ ìŠ¤ë ˆë“œë¡œ 나누어 ì§€ê² ë„¤ìš”?" ë�¼ëŠ” 질문ì�´ 있ì�„ 것 ê°™ì�€ë�° ê·¸ë ‡ì§€ëŠ” 않습니다. ìŠ¤ë ˆë“œëž€ ë�…립ì �ì�¸ 작업 단위입니다. 즉 다른것ì—� êµ¬ì• ë°›ì§€ì•ŠëŠ” ìž�ì²´ì �ì�¸ 작업 단위를 ìŠ¤ë ˆë“œë�¼ê³ 합니다. 윈ë�„ì—�서 워드 프로세서를 ë�„ìš°ê³ ëŒ€ìš©ëŸ‰ì�˜ ë�°ì�´í„°ë¥¼ 로드하여 프린터로 ì¶œë ¥í•œë‹¤ê³ ê°€ì •ì�„ 합시다. 프린팅 작업 ë�„중ì—� 워드프로세서를 ì‚¬ìš©í• ìˆ˜ 있습니까? ë¬¼ë¡ ìœˆë�„ 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ì�˜ ìƒ�위 í�´ëž˜ìŠ¤ë¡œì„œ ì§�ì ‘ 사용하지는 않습니다.
ìŠ¤ë ˆë“œë¥¼ ë�™ê¸°í™” 시키는 것ì�€ ìƒ�당히 ì–´ë ¤ìš´ 작업중ì�˜ 하나입니다. 아주 ìž‘ì�€ 실수만 하ë�”ë�¼ë�„ 프로그램ì�€ ìƒ�ê°�과는 ì „í˜€ 다른 방향으로 í�˜ëŸ¬ê°€ê³ 맙니다. ë˜�한 여러개ì�˜ ìŠ¤ë ˆë“œë¥¼ ë�™ì‹œì—� 디버깅 한다는 것ë�„ 쉬운ì�¼ì�€ 아닙니다. 그러나 다해ì�´ë�„ 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 ë�˜ëŠ”ê²ƒì�„ 방지하기 위해 í�¬ë¦¬í‹°ì»¬ 섹션ì�„ 사용하게 ë�œë‹¤. ì�´ëŠ” 윈ë�„우즈 프로그래ë°�ì—�서 ìŠ¤ë ˆë“œê´€ë ¨ 처리를 í•´ 줄 때ì—�ë�„ 나오는 용어ì�´ë‹¤.
http://iruril.cafe24.com/iruril/study/thread/thread%20syn.html
http://165.194.17.15/pub/upload/thread.zip
http://165.194.17.15/pub/upload/thread.zip










