1. single-threaded program & multi-threaded program
일반적인 C 프로그램은 single-threaded program이라고 할 수 있다. 즉, '하나'의 명령어 흐름(one sequence of statements)이 시간이 지나면서 실행되는 것이다.

반면, multi-threaded program은 '여러' 개의 명령어 흐름이 같은 시간 동안 동시에 실행되는 것이다.

multi-threaded program은 parallel execution과 concurrent execution 방식으로 실행될 수 있다. 만약 두 개의 스레드가 위와 같이 동일한 순간에 각각의 명령어 흐름을 실행하고 있다면, 이것은 parallel execution이라고 할 수 있다. 반면 하드웨어나 소프트웨어가 이를 지원하지 않을 경우 하나의 스레드만 실행될 수 있는데, 이 경우 다음과 같이 concurrent execution이 실행된다. 이것은 CPU가 여러 개의 스레드 사이를 빠르게 전환하면서 실행하는 방식을 의미한다.

multi-threaded program은 single-threaded program보다 복잡하지만, 성능 향상의 이점이 있을 수 있기 때문에 설계 시 고려할 가치가 있다.
2. How to use threads in C program
#include <stdio.h>
#include <pthread.h> **POSIX thread library 포함(1)**
void *computation(); //함수 선언
int main()
{
pthread_t thread1; **스레드 변수 선언(3)**
pthread_create(&thread1, NULL, computation, NULL); //스레드 생성 및 computation 함수를 해당 스레드에서 실행
pthread_join(thread1, NULL); //스레드 실행이 끝난 후 메인 실행 흐름과 합친다
return 0;
}
**스레드에 넣을 함수 선언(3)**
void *computation() { //void * 타입 포인터 반환
printf("Computation\n");
return NULL; //null 반환하게 설정
}
pthread_create() 함수는 별도의 스레드를 생성하고, 해당 스레드에서 특정 함수를 실행한다
pthread_create() 함수의 인자
- &thread1: 생성된 스레드를 저장할 변수
- NULL: 스레드의 속성을 설정할 수 있는 옵션 (여기서는 기본 설정 사용)
- computation: 실행할 함수
- NULL: 함수에 전달할 인자 (현재는 사용하지 않음)
pthread_join() 함수는 생성된 스레드를 메인 스레드와 합쳐주는데, pthread_join()이 실행될 때, 생성된 스레드가 종료되었으면 바로 실행되지만, 아직 스레드가 실행 중이라면 해당 스레드가 종료될 때까지 대기하게 된다.
pthread_join() 함수의 인자
- thread1: 합칠 스레드
- NULL: 반환값을 처리할 때 사용할 수 있는 변수
다음 코드를 저장하고 컴파일하면 다음과 같은 결과값이 나온다.
computation