tonykang22 / study

0 stars 0 forks source link

[리눅스 개발환경] 11. 스레드 #82

Open tonykang22 opened 2 years ago

tonykang22 commented 2 years ago

11. 스레드

스레드 개요

스레드(Thread)란?


main() {
    while (true) {
        if (입력 데이터 존재)
            처리 쓰레드(work) 생성; /* 생성 되자마자 다시 루프 */
    } 
}

work(입력 데이터) { /* 별도 독립적으로 동작 */ 
    입력 데이터 분석;
    데이터 처리;
    파일에 기록;
}


다중 프로세스와 다중 스레드 차이


프로세스 컨택스트 스위칭 이란?


주의할 점



스레드 개요



스레드 생성

#include <pthread.h>

int pthread_create (pthread_t *thread,
                                 const pthread_attr_t *attr,
                                 void *(*start_routine) (void *), 
                                 void *arg);


void * start_routine (void *arg);


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <pthread.h>

void *start_func(void *arg)
{
    int i, num = *(int *)arg; 
    for (i = 0; i < num; i++)
        printf("%d\n", i); 
    pthread_exit((void *)0);
}

int main() {
    int num = 10; 
    pthread_t thread_t; 
    int ret, status;

    ret = pthread_create(&thread_t, NULL, start_func, (void *)&num);
    if (ret) {
        printf("pthread_create error: %s\n", strerror(ret));
        return -1; 
    }

    pthread_join(thread_t, (void **)&status); 
    printf("Thread returned: %d\n", status); 
    return 0;
}



스레드 종료

#include <pthread.h>

void pthread_exit (void *retval);
#include <stdio.h> 
#include <stdlib.h> 
#include <pthread.h>

void *start_func(void *arg)
{
    int i, num = *(int *)arg; 
    for (i = 0; i < num; i++)
        printf("%d\n", i); 
    pthread_exit((void *)0);
}


#include <pthread.h>

int pthread_cancel (pthread_t thread);