하아 GPG에 가면 짜증이 나서 차분하게 글을 쓸 수가 없다. 왠지 다들 공격적인듯한 느낌이 들어서 가급적 글을 안쓸려고 하는데 또 글을 남겼다가 늪에 발이 빠졌다.
이번 떡밥은 이건데 착실히 답변을 달려고하다가, 짜증도 나고 귀찮기도해서 더이상 글을 쓰기 싫다. 사실 중간에 testors님이 제기한 문제는 그렇게 생각할 수도 있는 문제인데 그 뒤에 있는 글들, 그러니까 내가 공부 많이해서 잘아는데 그럴리없다는 투의 글들은 보면서 화가 난다. GPG도 완전히 끊어야겠다.
잔소리는 그만두고 제목인 동기화 이슈에 대해서 얘기하면 특별히 명령어를 주지 않더라도 memory barrier 역할을 하는 경우가 몇 가지 있다(내가 윈도우에 최적화된 프로그래머라서 다른 환경은 뭐가 있는지 당연히 모른다).
- CriticalSection에 들락날락하는 함수들
- Signal synchronization objects 함수들
- Wait 함수
- Interlocked 함수들
그리고 문제의 volatile. 이 예약어가 앞에 달리면 그 변수가 사용되는 모든 곳에 memory barrier가 강제로 삽입된다고 보면 된다. volatile을 쓰지말라고 하는건 위의 4가지가 memory barrier의 역할을 하니 섞어 쓸 필요는 없다는 말이다. 이미 깨끗하게 청소가되서 먼지 하나 없는데, 또 청소하는 삽질을 하지말라는거지 틀렸다는 말이 아니다. volatile 붙여서 프로그램 짜도 잘 돌아가니까 신경 끄고 살아도 상관은 없다. 나도 남들이 volatile을 쓰던말든 신경 끌란다.
수정:
위에서 언급한 volatile에 대한 수정해야할듯한데, 아직 어떻게 수정해야할지 확신이 서지 않는다. 밤에 공부를 좀 했는데, 하고나니 더 뿌옇게 변했다. 일단 줄 그어둠.
