#define ITER (50000000) #include <pthread.h>
#include <stdio.h> int gvar = 0;
void * X(void *i); int main(void)
{
pthread_t t1;
pthread_attr_t attr;
void *status;
int j; pthread_attr_init(&attr);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
pthread_create(&t1, &attr, X, NULL);
// Main thread
/////////////////////////
for (j = 0; j < ITER; j++) {
gvar = gvar + 1; }
///////////////////////// pthread_join(t1, &status);
printf("%d₩n", gvar);
} void * X(void *i)
int j; // Child thread
pthread_exit(NULL);
}
독학으로 공부를 하고 있는 사람입니다.
상호배제를 통해 올바른 값(=100000000)을 출력하도록 하는데
상호배제(mutual exclusion)를 위해 다음 두 함수를 이용하려 합니다
pthread_mutex_lock(&m);
pthread_mutex_unlock(&m);
이때 뮤텍스 변수 m은 다음과 같은 자료형으로 선언하여 사용(전역변수)
pthread_mutex_t m;
알려주시면 감사하겠습니다. (- -) (_ _) 꾸벅
이렇게 하시면 될 것 같습니다.
6번 줄: 뮤텍스 초기화
22, 38번 줄: 뮤텍스 락 acquiring
24, 40번 줄: 뮤텍스 락 releasing
댓글을 작성하려면 로그인해야 합니다.
qee2 6년 전
#define ITER (50000000)
#include <pthread.h>
#include <stdio.h>
int gvar = 0;
void * X(void *i);
int main(void)
{
pthread_t t1;
pthread_attr_t attr;
void *status;
int j;
pthread_attr_init(&attr);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
pthread_create(&t1, &attr, X, NULL);
// Main thread
/////////////////////////
for (j = 0; j < ITER; j++) {
gvar = gvar + 1; }
/////////////////////////
pthread_join(t1, &status);
printf("%d₩n", gvar);
}
void * X(void *i)
{
int j;
// Child thread
/////////////////////////
for (j = 0; j < ITER; j++) {
gvar = gvar + 1; }
/////////////////////////
pthread_exit(NULL);
}
독학으로 공부를 하고 있는 사람입니다.
상호배제를 통해 올바른 값(=100000000)을 출력하도록 하는데
상호배제(mutual exclusion)를 위해 다음 두 함수를 이용하려 합니다
pthread_mutex_lock(&m);
pthread_mutex_unlock(&m);
이때 뮤텍스 변수 m은 다음과 같은 자료형으로 선언하여 사용(전역변수)
pthread_mutex_t m;
알려주시면 감사하겠습니다. (- -) (_ _) 꾸벅