안녕하세요.

 

저는 초보입니다.

 

쓰레드와 전역변수에 대하여 궁금한 사항이 있어서 문의 드립니다.

 

아래의 예제와 같이 구현할 경우 쓰레드 함수에서는 전역변수 값을 변경하지만

메인함수 무한루프 문에서는 전역변수의 값을 변경하지 않는 경우에도

꼭!!!  뮤텍스를 사용하여야만 하는지요.

즉 <1> <2> <3> <4> 모두 생략하면 안되는지요.

 

너무 초보적인 질문이라 생각되지만 고수님들의 답변 부탁드립니다.

 

예제)

#include  <pthread.h>

... <생략>...

 

pthread_mutex_t imsi_mutex = PTHREAD_MUTEX_INITIALIZER;

 

int g_imsi = 0;

 

void *thread_func(void *arg)

{

    while (1) {

        pthread_mutex_lock(&imsi_mutex);               // <1>

        g_imsi++;

        pthread_mutex_unlock(&imsi_mutex);            // <2>

        sleep(1);

    }

}

 

int main()

{

    pthread_t thread_id;

    pthread_create(&thread_id, NULL, thread_func, NULL);

    usleep(100);

    while (1) {

             pthread_mutex_lock(&imsi_mutex);           // <3>

             printf("imsi=%d\n", g_imsi);

             pthread_mutex_unlock(&imsi_mutex);        // <4>

             sleep(1);

    }

    reutrn 0;

}