multithreading network programming - 1. multithread(멀티스레드 네트워크 프로그래밍)






 멀티스레드는 프로세스 내부에서 두가지의 작업을 동시에 실행하는것을 의미합니다. fork의 경우 자기 자신과 똑같은 완전 새로운 프로세스를 복제하지만 thread의 경우 원하는 작업을 테스크 형태로 생성합니다.




 간단한 Thread 예제


#include <stdio.h>
#include <pthread.h>
#define NUM_THREADS 3

void *thread_ (void *arg)
{
       printf("get_id[%d] = %lu \n", arg, pthread_self());
       return arg;
}

main()
{
       pthread_t tid[NUM_THREADS];
       int i, status;

       for(i=0; i < NUM_THREADS; i++) {
              status = pthread_create (&tid[i], NULL, thread_, (void *) i );
       }

       pthread_exit(NULL);
}



이 예제는 쓰레드를 세개 생성하여 쓰레드 고유 id를 출력하는 예제입니다.

위의 pthread_create 함수를 이용해 쓰레드를 생성합니다.

내부 인자로는

1. &tid[i] -> 스레드가 생성될때 스레드의 ID가 저장될 위치의 주소를 가르킵니다.

2. NULL -> 생성할 스레드의 속성을 설정할때 사용하는데 대부분 NULL을 사용합니다.

3. thread_ -> 쓰레드가 실행시킬 (void *)형의 함수를 가르킵니다. 위 코드에선 선언된 *thread_ 함수를 불러옵니다.

4. (void *) i -> 쓰레드에 의해 호출되는 함수에 전달하는 인자입니다. thread_함수에선 *arg로 받게됩니다.

pthread_create 함수의 수행이 성공적으로 끝나면 0을 실패하면 오류코드를 반환합니다.

위 예제에서는 define된 NUM_THREADS만큼 for문 내에서 스레드를 생성합니다.

생성된 스레드는 각각 0과 1,2를 thread_함수로 넘겨주고 함수내에서는 전달받은 인자와 pthread_self()를 이용해 쓰레드의 고유 id를 출력해줍니다.

출력결과입니다.