You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
가시성이란 데이터를 읽을 때 오래된 stale data가 아닌 최신 값을 읽을 수 있어야 한다는 뜻으로, 한 Thread에서 변경한 특정 메모리의 값이, 다른 Thread에서 제대로 읽어지는지에 대한 것이다.
가시성 문제란, 여러 개의 스레드가 사용됨에 따라, CPU Cache Memory와 RAM의 데이터가 서로 일치하지 않아 생기는 문제를 말한다. 즉, 쓰레드가 변경한 값이 메인 메모리에 저장되지 않아서 다른 Thread에서 최신 값을 읽어오지 못해 데이터 정합성이 깨지는 문제를 말한다. 이는 싱글 스레드 환경에서는 문제가 되지 않지만, 멀티 스레드 환경에서는 문제가 된다.
synchronized는 멀티쓰레드 환경에서 하나의 Thread가 아닌 여러 Thread가 write하는 경우, 변수 read & write의 원자성(atomic)을 보장해야하는 상황에서 사용하기 좋다.
volatitle은 멀티쓰레드 환경에서 하나의 Thread만 read & write하고, 나머지 Thread가 read하는 경우, 변수값을 가장 최신의 값으로 보장해야하는 상황에서 사용하기 좋다. (이 경우, synchronized를 쓰는 것은 매 작업시마다 blocking을 하기 때문에 volatile이 더 낫다.)
Activity
daadaadaah commentedon Feb 10, 2023
메모리 가시성 문제이란 무엇인가?가시성 문제란, 여러 개의 스레드가 사용됨에 따라, CPU Cache Memory와 RAM의 데이터가 서로 일치하지 않아 생기는 문제를 말한다. 즉, 쓰레드가 변경한 값이 메인 메모리에 저장되지 않아서 다른 Thread에서 최신 값을 읽어오지 못해 데이터 정합성이 깨지는 문제를 말한다. 이는 싱글 스레드 환경에서는 문제가 되지 않지만, 멀티 스레드 환경에서는 문제가 된다.메모리 가시성은 왜 발생할까?
daadaadaah commentedon Feb 10, 2023
synchronized와 volatitle의 차이점은 무엇인가?
synchronized는 멀티쓰레드 환경에서 하나의 Thread가 아닌 여러 Thread가 write하는 경우, 변수 read & write의 원자성(atomic)을 보장해야하는 상황에서 사용하기 좋다.volatitle은 멀티쓰레드 환경에서 하나의 Thread만 read & write하고, 나머지 Thread가 read하는 경우, 변수값을 가장 최신의 값으로 보장해야하는 상황에서 사용하기 좋다. (이 경우, synchronized를 쓰는 것은 매 작업시마다 blocking을 하기 때문에 volatile이 더 낫다.)