Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)

Slides:



Advertisements
Similar presentations
6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
Advertisements

7 장 프렌드와 연산자 중복 1 명품 C++. 친구란 ? 2 우리 집 냉장고 내 침대 우리 집 TV 우리 집 식탁 친구 친구 ? 내 가족의 일원은 아니지만 내 가족과 동일한 권한을 가진 일원으로 인정받은 사람.
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
윈도우 프로그래밍 실습 김 창 헌.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
3 장 stack and queue.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
Network Lab. Young-Chul Hwang
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
Chapter 4 Multi-Threaded Socket
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Visual C++ Programming Tree Control/MultiThread
Internet Computing KUT Youn-Hee Han
제12장 다형성과 가상함수 다형성의 개념을 이해한다. 상향 형변환의 개념을 이해한다. 가상 함수의 개념을 이해한다.
7 스택.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
Visual C++ Programming MultiThread
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
명품 C++ 7장 프렌드와 연산자 중복.
Visual Basic .NET 처음 사용하기.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
자바네트워크 제2주 실습 네트워크기초, 스레드.
스택(Stack) 김진수
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
10장. 예외처리.
Introduction To Data Structures Using C
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
27장. 모듈화 프로그래밍.
영상처리 실습 인공지능연구실.
명품 C++ 9장 가상 함수와 추상 클래스.
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
MVC 모델을 이용한 웹 애플리케이션 작성 웹 애플리케이션 개발 순서를 알아본다 웹 애플리케이션의 실행 순서를 이해한다.
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 5.0 프로그래밍.
System.Threading Process / Thread SD50 – C# & .NET Platform.
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
C언어 응용 제7주 실습 해보기 제6장.
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
LabVIEW WiznTec 주임 박명대 1.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
JA A V W. 06.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
Chapter 17. 스레드.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
7 생성자 함수.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 828-832쪽)

실습 목적 및 장비 실습 목적 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0) 멀티스레드 프로그램의 동기화 처리 방법 Critical Section의 표현과 이용 방법 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0)

1. Critical Section을 이용한 통신 프로그램 예제 프로그램 개요 다이얼로그 기반 애플리케이션 Stack 클래스 구현 그래픽 기능을 이용하여 스택 상태 그림 두 개의 스레드를 생성 스택에 Push()한 후 스택 다시 그림 스택에서 Poph()한 후 스택 다시 그림 Critical Section을 사용하여 두 스레드에 대한 동기화 표현 두 개의 체크박스 Disabled 속성 m_ctrlPush, m_ctrlPop 변수 연결 실행 파일(http://cs.sookmyung.ac.kr/class/06395/Lab/CriticalSectionTest0.exe)

Critical Section을 이용한 통신 프로그램 예제 Stack의 구현 (Stack.h) #define STACK_SIZE 10 class Stack { public: int Pop(); void Push (); BOOL IsFull(); BOOL IsEmpty(); int Stack::operator[](int i); Stack(); virtual ~Stack(); private: int * data; int top; };

Critical Section을 이용한 통신 프로그램 예제 Stack의 구현 (Stack.cpp) #include <stdafx.h> // for BOOL #include “Stack.h” Stack::Stack() { top = 0; data = new int[STACK_SIZE]; for (int i = 0; i < STACK_SIZE; i++) data[i] = -1; } Stack::~Stack() { delete [] data; BOOL Stack::IsEmpty() { return top == 0; BOOL Stack::IsFull() { return top == STACK_SIZE;

void Stack::Push() { if (!IsFull()) data[top] = top, top++; } int Stack::Pop() { if (!IsEmpty()) { int x = data[top]; data[top] = -1; top--; return x; } else return -1; int Stack::operator[](int i) { return data[i];

Critical Section을 이용한 통신 프로그램 예제 동기화 객체 생성, 스레드 함수 포로토타입 선언 (in “CriticalSectionTestDlg.cpp”) 두 개의 Thread 생성 #include <afxmt.h> CCriticalSection g_cs; UINT ThreadForPush(LPVOID pParam); UINT ThreadForPop(LPVOID pParam); BOOL CCriticalSectionTestDlg::OnInitDialog() { … AfxBeginThread(ThreadForPush, this); AfxBeginThread(ThreadForPop, this); }

Critical Section을 이용한 통신 프로그램 예제 전역 변수로 Stack 인스턴스 정의, 스택 상태를 그리는 함수 작성 #include "Stack.h" Stack stack; void CCriticalSectionTestDlg::DrawStack() { static CClientDC dc(this); CRect r; GetClientRect(&r); r.InflateRect(-100, -20); CPoint br = r.BottomRight(); CPoint tl = r.TopLeft(); for (int i = 0; i < STACK_SIZE; i++) { CRect rect(tl.x, ((i + 1) * tl.y + (STACK_SIZE - i - 1) * br.y) / STACK_SIZE, br.x, (i * tl.y + (STACK_SIZE - i) * br.y) / STACK_SIZE); CBrush *pBrush = (CBrush *) dc.SelectStockObject(GRAY_BRUSH); if (stack[i] == -1) pBrush = (CBrush *) dc.SelectStockObject(WHITE_BRUSH); Sleep(20); dc.FillRect (&rect, pBrush); dc.Rectangle(&rect); }

Critical Section을 이용한 통신 프로그램 예제 스레드 함수 정의 UINT ThreadForPush(LPVOID pParam) { CCriticalSectionTestDlg *pWnd = (CCriticalSectionTestDlg *) pParam; while (1) { Sleep (200 + rand()%1000); g_cs.Lock(); if (!stack.IsFull()) { stack.Push(); pWnd->m_ctrlPush.SetCheck(1); pWnd->m_ctrlPop.SetCheck(0); pWnd->DrawStack(); } g_cs.Unlock(); return 0;

Critical Section을 이용한 통신 프로그램 예제 스레드 함수 정의 UINT ThreadForPop(LPVOID pParam) { CCriticalSectionTestDlg *pWnd = (CCriticalSectionTestDlg *) pParam; while (1) { Sleep (300 + rand()%1000); g_cs.Lock(); if (!stack.IsEmpty()) { stack.Pop(); pWnd->m_ctrlPush.SetCheck(0); pWnd->m_ctrlPop.SetCheck(1); pWnd->DrawStack(); } g_cs.Unlock(); return 0;

추가 실험 및 보고서 작성 요령 추가 실험 동기화 객체에 대한 Lock(), Unlock() 호출 부분을 주석 처리한 다음 컴파일하여 실행 결과 관찰 보고서 Dialog 클래스 부분의 프로그램 소스 프로그램 설명 (AppWizard에 의해 생성된 부분은 제외) 위의 추가 실험 결과 분석