qee2   2년 전

#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;


알려주시면 감사하겠습니다. (- -) (_ _) 꾸벅

kks227   2년 전

이렇게 하시면 될 것 같습니다.

6번 줄: 뮤텍스 초기화

22, 38번 줄: 뮤텍스 락 acquiring

24, 40번 줄: 뮤텍스 락 releasing

댓글을 작성하려면 로그인해야 합니다.