티스토리 뷰

C,C++

C : C 쓰레드(Thread) 정리와 예제 1

Andrew Shin 2015. 6. 16. 19:43

C언어 쓰레드(Thread)에 대한 간략한 정리와 예제


쓰레드 부분을 다시 공부해서 정리하려고 다른 블로그 들을 참고했는데, 너무 글씨위주로 장문의 글들이고 코드가 정리되지 않은상태로 있어서 보기가 너무 힘들었다. 그래서 정말 필요한 부분만 간략하게 정리해 보겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <process.h>
#include <stdlib.h>
 
void CharProc(void *p);
 
int main()
{
    for (auto i = 0; i < 10; i++)
        _beginthread(CharProc, 0, (void*)(rand()%26+'A'));
    getchar();
    return 0;
}
 
void CharProc(void *p)
{
    char ch = (char)p;
    for (auto i = 0; i < 100; i++)
        printf("%c", ch);
}
cs


예제1. 코드 분석

기본적인 출력(printf)를 하기 위해서 stdio.h 사용.

쓰레드를 사용하기 위해서 process.h 사용

rand 함수를 사용하기 위해서 stdlib.h 사용.


예제는 랜덤한 문자를 쓰레드에 전달하여 해당 문자를 100개 콘솔에 출력하는 쓰레드 이다.

C에서 사용하는 쓰레드는 매개변수로 void형 포인터를 받으며, 반환값이 없다.

void 포인터에 어떤값이든 포인터형태로 보내서 프로시저에서 원래 값으로 형변환해서 사용할 수 있다.

예제에서는 임의의 알파벳을 void 포인터형으로 보내고, 받아서 char형으로 형변환하여 사용했다.


for문에서 사용한 auto라는 형식에 대해서 궁금한 사람은 아래 링크를 참조하기 바란다.

http://

간략하게 덧붙이면 자동으로 변수의 타입을 지정해주는 것이다.


코드는 어렵지 않아서 설명할 부분이 별로 없는것 같다. _beginthread 함수의 매개변수만 한번 살펴보자.


첫번째는 매개변수는 도움말이나 인터넷을 찾아보면 쓰레드가 시작하는곳의 루틴이라고 설명되어 있는데 초보자가 이해하기는 다소 어려울 수 있겠다. 나는 쉽게말해 실행시킬 함수라고 이야기 하겠다. 함수가 종료되면 스레드는 자동으로 종료된다.


두번째 매개변수는 스택의 사이즈인데, 0을 입력하면 실행파일의 헤더에 저장된 기본 최대크기를 사용한다. 스택의 사이즈란 쉽게말해 변수를 저장할수 있는 저장소의 크기이며 기본이 1mb라고 알고있는데, 너무 많은 배열을 사용한다거나 (예를들어 int number[100000][100000][1000000]등과 같이) 재귀변수의 깊이가 너무 깊을경우에 stack overflow라는 에러가 발생한다.


세번째 매개변수는 앞서 첫번째 매개변수로 입력된 함수에 전달될 매개변수의 void 포인터 형이다. 변수가 여러개일 경우에는 구조체 형식으로 묶어서 전달하면 되겠다. 구조체 형식으로 전달하는 방법은 다음게시물 MFC 쓰레드 정리와 예제 2 (http://andrew0409.tistory.com/93) 을 참조하면 되겠다.



위와 같은 출력형태를 띄게되는데 잠시 빨간 네모칸에서 쓰레드의 특징을 가볍게 짚고 넘어가자.

쉽게말해서 쓰레드를 사용한다는 것은 메인함수를 여러개 동작시키는것과 같다고 할수 있다.


쓰레드는 언제 시작해서 언제 끝날지 예측할 수 없다.

물론 쓰레드를 생성하는 시점은 사용자가 지정해 줄 수 있지만 정확한 시점을 정의할수는 없다. 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함