스레드의 메모리영역의 읽기 쓰기 수정 같은 작업을 시각화 해주는 온라인 서비스를 발견하였습니다.

사이트는 http://svr-pes20-cppmem.cl.cam.ac.uk/cppmem/

해당 프로그램은 모든 교차 실행을 판단하고 각 스레드를 시각해주는 역할을 합니다. 메모리 모델에 대해서는 다음의 링크를 참조해주시기 바랍니다.

http://egloos.zum.com/sweeper/v/3059861
https://en.cppreference.com/w/cpp/atomic/memory_order

해당툴로 스레드를 정의할려면 삼중 중괄호를 해주고 그안의 작업에 대해 정의를 할려면 괄호를 해주면됩니다. 일단 간단하게 두개의 스레드를 만들고 data race를 유발 시켜봅겠습니다. 다음은 아래의 코드입니다.

// contrasting with data_race.c, this 
// shows a concurrent use of sc_atomic that does
// not have a data race
int main() {
  int x=0;
  int y = 0;
{{{ {
    x=1000;
    y=3000;
    }
}}}
{{{ {
    x=3333;
    y=3000;
    }
}}}
  return 0; }

이와 같은 코드를 치고 run을 쳐주면 어디부분에 data race가 발생하는지 어떤결과가 나올지의 대해 데이터시각화를 해줍니다.

여기의 용어는 http://svr-pes20-cppmem.cl.cam.ac.uk/cppmem/help.html 사이트에 정리되어있습니다.

위의 그래프를 설명해주자면 wna는 write-non-atomic의 의미로 보시면됩니다.

sb는 Sequnced-Before의 의미로 a가 b보다 먼저 실행된다는 것입니다. 

b는 총 두가지의 경우가 있는데 하나는 c랑 e입니다. 여기서 데이터경쟁이 일어나게 됩니다. d와 f도 마찬가지로 데이터경쟁상태입니다. 이툴은 이런식으로 간단한 스레드의 읽기 쓰기 수정에 대해 시각화를 해주게 됩니다.


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다