pthread_attr_setscope 함수 관련 질문
글쓴이: 하하 / 작성시간: 화, 2004/08/31 - 1:30오후
#include <pthread.h> #include <string.h> #include <unistd.h> pthread_mutex_t mutex_lock = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t thread_cond = PTHREAD_COND_INITIALIZER; pthread_cond_t thread_cond2 = PTHREAD_COND_INITIALIZER; struct com_data { int a; int b; }; struct com_data mydata; int sig_num; void *do_write(void *data) { int loop = 0; mydata.a = 0; mydata.b = 0; while(loop < 10) { pthread_mutex_lock(&mutex_lock); mydata.a = random() % 6000; mydata.b = random() % 6000; pthread_cond_signal(&thread_cond); pthread_mutex_unlock(&mutex_lock); loop++; sleep(1); } printf("sig is %d ", sig_num); exit(0); } void *do_read(void *data) { sig_num = 0; while(1) { pthread_mutex_lock(&mutex_lock); pthread_cond_wait(&thread_cond, &mutex_lock); printf("%4d + %4d = %4d ", mydata.a, mydata.b, mydata.a + mydata.b); sig_num++; pthread_mutex_unlock(&mutex_lock); } } int main() { pthread_t p_thread[2]; pthread_attr_t myattr; pthread_attr_t myattr2; int thr_id; int status; int a = 1; int b = 2; int scope; pthread_attr_init(&myattr); pthread_attr_init(&myattr2); pthread_attr_setscope(&myattr, PTHREAD_SCOPE_PROCESS); pthread_attr_setscope(&myattr2, PTHREAD_SCOPE_SYSTEM); status = pthread_attr_getscope(&myattr, &scope); printf("PROCESS : %d, %d, %d ", scope, PTHREAD_SCOPE_PROCESS, status); status = pthread_attr_getscope(&myattr2, &scope); printf("SYSTEM : %d, %d, %d ", scope, PTHREAD_SCOPE_SYSTEM, status); thr_id = pthread_create(&p_thread[0], &myattr, do_write, (void *)&a); thr_id = pthread_create(&p_thread[1], &myattr2, do_read, (void *)&b); pthread_join(p_thread[0], (void **) status); pthread_join(p_thread[1], (void **) status); return 0; }
리눅스는 clone 시스템 콜을 통한 kernel 쓰레드로 알고 있습니다.
헌데...
pthread_attr_setscope(&myattr, PTHREAD_SCOPE_PROCESS);
이렇게.. User_level_thread 로 설정되도 돌아가는 이유는.. 멀까요? ㅎ
Forums:
댓글 달기