멀티쓰레드상 동기화 문제에 대한 질문입니다.

muzie의 이미지

global int val;
 
func a()
{
    if (statement == val)
        val = 10;
    else if (statement == val)
        val = 20;
     ..
     ..
}

func a는 멀티쓰레드로 도는 모듈에서 호출되는 함수입니다.
이 경우에 val 값에 대해서 lock을 걸어줘야 할런지요?

그냥 생각했을때 statement A일때를 처리하여 10을 어사인 하기 전에
func a가 다시 호출되었고 그 때의 statement가 B였다면
기대값이 달라질 수도 있으리라 생각됩니다만..

lock을 해줘야할까요?

서지훈의 이미지

val을 read/write 하는 곳은 전부 막아줘야 합니다.
그렇지 않으면 다른 쓰레드에서 변경된 값이 영향을 주겠죠.

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);