2개 이상의 개별 쓰레드가 동시에 동일한 데이터에 접근하고, 이러한 접근 중 하나 이상이 write일 때 발생
1.
디버깅하기 굉장히 어려움
2.
OS의 스케쥴러가 프로그램을 실행할 때마다 다른 방식으로 concurrent tasks를 인터리빙할 수 있기 때문에 비결정적
data race 피하기
발생하는 원인
- 데이터가 shared mutable state이기 때문에
- 데이터가 변경되지 않거나, 공유되지 않는 경우엔 data race가 발생할 수 없음
피하려면
- value semantic을 사용하여 shared mutable state를 제거
- value semantic인 "let" : immutable하기 때문에 안전