๋ ธ์ ์ ์ ๋ฆฌํ๋ ค๋ค๊ฐ ๊ทธ๋ฅ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๋ค..
๊ฐ์๊ธฐ ์ด๊ฑธ ํ๋ ์ด์ ๋ ๋ฉ์์ ๋ํํ ํ๋ผ๊ณ ํ์ ์ผ์ด ์ค๋ ๋ ๊ด๋ จ์ด์ด์ ๋จผ์ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ข ์ ๋๋ก ์์๋ณด๊ณ ์ผ์ ํ๋ ค๊ณ ํ๋ค..
์ฐธ๊ณ ๋ก pthread๊ด๋ จ ์ฒ๋ฆฌ๋ฅผ ํ ๋, 'undefined reference to `pthread_create' ์ด๋ฐ ์ค๋ฅ๊ฐ ๋ ์๋ ์๋๋ฐ, ์ด๊ฑธ ํด๊ฒฐํ๋ ค๋ฉด ์ปดํ์ผ ํ ๋ ์๋์ฒ๋ผ -lpthread ์ต์ ์ ์ถ๊ฐํด์ฃผ์ด์ผํ๋ค!
gcc -o pthread pthread.c -lpthread
- pthread_create ํจ์
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
/*
์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ: ์ฐ๋ ๋ ์๋ณ์ (์ค๋ ๋ ์ฃผ์)
๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ: ์ฐ๋ ๋ ํน์ฑ (๊ธฐ๋ณธ์ NULL)
์ธ๋ฒ์งธ ํ๋ผ๋ฏธํฐ: ๋ถ๊ธฐ์์ผ์ ์คํํ๊ฒ ๋ ์ฐ๋ ๋ ํจ์์ ์ฃผ์
๋ค๋ฒ์งธ ํ๋ผ๋ฏธํฐ: ์ฐ๋ ๋ ํจ์๊ฐ ๋๊ฒจ๋ฐ์ ๋งค๊ฐ๋ณ์
์ฑ๊ณตํ๋ฉด 0 ์๋๋ฉด ์ด์ํ ๊ฐ ๋ฐํใ
ใ
*/
์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ ๋๊ฐ ์์ฑ๋๊ณ 3๋ฒ์งธ ํจ์๋ฅผ ์คํํ๊ฒ ๋๋น
์์ )
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void *p_function(void *data){ //funcion pointer
pid_t pid; //process id
pthread_t tid; //thread id
pid=getpid();
tid=pthread_self();
char*thread_name=(char*)data;
int i=0;
while(i<3){
printf("thread name:%s, tid:%x, pid:%d\n",thread_name,(unsigned int)tid,(unsigned int)pid);
i++;
sleep(1);
}
}
int main(){
pthread_t pthread[2]; //arrary storing pthreads
int thr_id;
int status;
char p1[]="th1";
char p2[]="th2";
char main_[]="main";
thr_id=pthread_create(&pthread[0],NULL,p_function,p1);
printf("Return Val: %d\n",thr_id);
if (thr_id!=0){
perror("Failed to create pthread!\n");
exit(EXIT_FAILURE);
}
p_function(main_);
thr_id=pthread_create(&pthread[1],NULL,p_function,p2);
printf("Return Val: %d\n",thr_id);
if(thr_i!=0){
perror("Failed to creae pthread!\n");
exit(EXIT_FAILURE);
}
return 0;
}
์ด๊ฑธ ๋๋ฆฌ๋ฉด ์๋์ฒ๋ผ ๊ทธ๋ฅ thread2๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋๋๋ฒ๋ฆฐ๋น......
๊ทธ๋์ ์ด๋ pthread_joinํจ์๋ฅผ ์ฌ์ฉํด์ ๋จ์ ์ค๋ ๋๋ค์ ์คํ์ ๊ธฐ๋ค๋ ค์ค ์ ์๋น
- pthread_join ํจ์
int pthread_join(pthread_t thread, void ** return);
/*
(thread๊ฐ ์ข
๋ฃํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ์ข
๋ฃํ๋ฉด ํฌ์ธํฐ๋ฅผ ๋ฆฌํด)
์ฒซ๋ฒ์งธ ์ธ์: thread ๊ฐ์ฒด
๋๋ฒ์งธ ์ธ์: NULL์ด ์๋๋ฉด ํฌ์ธํฐ ๊ฐ์ return ๋ฐ์ ์ ์๋ค.
*/
pthread_join(pthread[0],&status);
pthread_join(pthread[1],&status);
์ด๋ฐ์์ผ๋ก ํด์ ์ค๋ ๋๋ค์ ๋ฉ์ธ ํจ์๊ฐ ๊ธฐ๋ค๋ ค์ค ์ ์๋ค!
์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ์ฌ์ง์ฒ๋ผ th2๊น์ง ๋ค ๊ธฐ๋ค๋ ค์ฃผ๊ณ ์ข ๋ฃ๋๋ค~
์ฐธ๊ณ ๋ก ๋น์ฐํ์ง๋ง pid๋ ๋ค ๊ฐ์ ๊ฒ์ ๋ณผ ์ ์๋ค!
์ผ์ ๊ท์ฐจ๋ญ ๋ค๋ฅธ ํจ์๋ค์ ๋ค๋ฅธ ๊ฒ์๋ฌผ์์ ์ฐ๊ฒ ๋น~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reference
https://m.blog.naver.com/whtie5500/221692793640
https://www.geeksforgeeks.org/thread-functions-in-c-c/
'๐ฅ๏ธ Computer Science > OS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS/Linux] ํ๋ก์ธ์ค ๊ถํ, ID, ํ๋ก์ธ์ค ๊ด๋ฆฌ ์ ๋ณด ๊ด๋ จ ํจ์ (0) | 2023.09.15 |
---|---|
[OS] ํ๋ก์ธ์ค Process (2) - ํ๋ก์ธ์ค ๊ฐ ์์ ๊ณต์ (IPC) (0) | 2023.07.10 |
[OS] ๋๊ธฐ์ ์ ์ถ๋ ฅ vs ๋น๋๊ธฐ์ ์ ์ถ๋ ฅ (0) | 2023.05.11 |
[OS] ์ค๋ ๋(Thread) (0) | 2023.05.10 |
[OS] Thread Local Storage (TLS) (0) | 2023.04.11 |