멀티스레드로 카운터 올리는 코드 짜는 중인데요. 여러 스레드에서 동시에 값을 올리니까 계산이 안 맞길래, volatile 붙이면 된다는 글 보고 붙였거든요. 근데도 여전히 값이 새더라고요.
대충 이런 코드예요.
volatile int count = 0;
void increment() {
count++; // 스레드 여러 개가 동시에 호출
}
스레드 10개가 각각 1000번씩 올리면 10000이 나와야 하는데 9873 이런 식으로 나옵니다. volatile 붙였으면 다른 스레드가 바꾼 값이 바로 보이는 거 아니었나요? 근데 왜 유실이 나는 건지 이해가 안 됩니다.
volatile이 뭔가 제 생각이랑 다르게 동작하는 것 같은데, 이럴 때는 어떻게 처리해야 값이 안 새나요? synchronized 걸면 되긴 하는데 그거 말고 좀 더 가벼운 방법 없을까요?