소프트웨어/Thread
스레드 프로그래밍 연습 - 3 : 스레드 동시 수행
카켈
2007. 5. 2. 12:50
코드 주소
http://kin.naver.com/db/detail.php?d1id=1&dir_id=10104&eid=9kk6jmd+YayvujZz7fRRjP8F0n0+o/Yc&qb=vrK3ubXl
코드 받기
수행 화면
코드 설명
병렬로 스레드를 수행할때 지연을 줬을때와 안 주었을때 그리고 함수로 순차 수행했을때 차이를 보여주는 예제 입니다.
코드 내용
http://kin.naver.com/db/detail.php?d1id=1&dir_id=10104&eid=9kk6jmd+YayvujZz7fRRjP8F0n0+o/Yc&qb=vrK3ubXl
코드 받기
수행 화면
코드 설명
병렬로 스레드를 수행할때 지연을 줬을때와 안 주었을때 그리고 함수로 순차 수행했을때 차이를 보여주는 예제 입니다.
코드 내용
/* 저작권 표기 네이버 지식인 : C 쓰레드 예제에서 에러가 납니다... 고수님들 도와주세요~~ http://kin.naver.com/db/detail.php?d1id=1&dir_id=10104&eid=0bUQ1CpEfllQ+RSELTqBVtOEPnrGHJN/&qb=vrK3ubXl http://cakel.tistory.com 교육용을 목적으로 자유롭게 배포 할수 있습니다. thread_dsp.cpp : 극한의 상황을 줘서 지연을 주었을때, 안주었을 때의 스레드 처리 순서와 함수로 줬을때 처리 순서를 나타내는 프로그램입니다. WIN32 의 함수를 사용했습니다. */ #include <process.h> #include <stdio.h> #include <windows.h> #include <conio.h> void dsp1(void *param) { // 100 ms 를 단위로 한줄을 출력을 하는 함수 입니다. int i = 0; for (i=0; i<10; i++) { printf("[1]%d\n",i); Sleep(100); } printf("dsp1 수행 완료\n"); } void dsp2(void *param) { // 100 ms 를 단위로 한줄을 출력을 하는 함수 입니다. int i = 0; for (i = 0; i< 10; i++) { printf("[2]%d\n", i); Sleep(100); } printf("dsp2 수행 완료\n"); } void dsp3(void *param) { // delay 없이 한줄을 바로 출력하는 함수입니다. int i = 0; for (i=0; i<10; i++) { printf("[3]%d\n",i); } printf("dsp3 수행 완료\n"); } void dsp4(void *param) { // delay 없이 한줄을 바로 출력하는 함수입니다. int i = 0; for (i = 0; i< 10; i++) { printf("[4]%d\n", i); } printf("dsp4 수행 완료\n"); } int main() { // 스레드의 주소를 담는 핸들을 선언합니다. HANDLE th1, th2; // Race condition(경쟁조건) 에서 수행합니다. printf("Sleep(100)을 쓰고 스레드 1, 2를 실행 합니다.\n"); th1 = (HANDLE)_beginthread(dsp1, 0, NULL); th2 = (HANDLE)_beginthread(dsp2, 0, NULL); // 스레드 완료를 위해 무한으로 기다립니다. WaitForSingleObject(th1, INFINITE); WaitForSingleObject(th2, INFINITE); printf("아무키를 치면 다시 딜레이 없이 바로 스레드 3, 4를 실행합니다.\n"); _getch(); // 아무키를 입력받습니다. // 원래는 1번과 2번 스레드가 동시에 일어나므로 느린 PC 에서는 같이 출력될수 있습니다. // 다시 스레드를 구동합니다. th1 = (HANDLE)_beginthread(dsp3, 0, NULL); th2 = (HANDLE)_beginthread(dsp4, 0, NULL); // 스레드 완료를 위해 무한으로 기다립니다. WaitForSingleObject(th1, INFINITE); WaitForSingleObject(th2, INFINITE); printf("아무키를 치면 하나의 Sleep(100)을 쓴 함수 1, 2(프로시져)로 수행합니다.\n"); _getch(); // 아무키를 입력받습니다. // 단일 함수로써 dsp1(), dsp2() 함수로 호출합니다. // NULL 과 0 은 같은 역할을 합니다. dsp1(NULL); dsp2(0); printf("수행완료 프로그램 끝\n"); return 0; }