#include <iostream>
#include <pthread.h>
using namespace std;
int counter = 0;
void* goodThProc(void *arg)
{
for (int k = 0; k < 1000; k++) {
++counter;
fprintf(stdout, "counter : %d\n", counter);
for (int l = 0; l < 10000; l++) {
l *= 2;
l /= 2;
l += 10;
l -= 10;
}
}
return NULL;
}
int main()
{
const int nThread = 2;
pthread_t goodTh[nThread];
int ret;
for(int i = 0; i < nThread; ++i) {
ret = pthread_create(&(goodTh[i]), NULL, goodThProc, NULL);
if (ret != 0) {
fprintf(stderr, "pthread_create[%d] error : %d\n", i, ret);
return -1;
}
}
for (int i = 0; i < nThread; ++i) {
void* pRet;
int joinRet;
joinRet = pthread_join(goodTh[i], &pRet);
if (joinRet != 0) {
fprintf(stderr, "pthread_join[%d] error : %d\n", i, joinRet);
}
}
return 0;
}
$ g++ a.cpp -g -Wall -o a.out -lpthread
---------------------------------------------------------
컴파일시 -lpthread를 주지 않아도 pthread_create만 쓰면 에러가 나지 않는 다.
대신 실행하면 segmentation fault를 낸다. gdb로 분석해도 call stack도 없다.
아무튼 -lpthread 옵션은 반드시 필요하다.
pthread_join을 해주지 않으면 join()처럼 parent가 먼저 죽었을 때, child가 일을 마치지 못하였어도
종료해 버린다.
댓글 없음:
댓글 쓰기