lunchclass / cpp

6 stars 3 forks source link

[Question] Item 16 - const 멤버함수를 스레드에 안전하게 작성하라 #4

Open JayCheck opened 7 years ago

JayCheck commented 7 years ago

item16의 스터디 중 const 멤버 함수를 "항상" thread safety 하게 작성하라는 의도인가? 에 대한 토의가 있었습니다.

만약 저자가 C++11/14에서 const 멤버 함수도 항상 thread safety 하게 작성 해야 한다는 의도라면 기존의 설명 방식처럼, C++ 98 대비 C++11/14 부터는 달라지는 점이 있기 때문에 const 멤버 함수도 thread safety 하게 작성해야 한다 라는 논지로 설명을 했을거라는 의견이 있었습니다.(@JayChl) (그게 아니라면 C++11/14 에 대한 이야기 보다는 general 한 programming rule 이나 C++ 자체에 대한 설명으로 보는게 적합할 것으로 생각됨)

반면에 다른 의견으로 getter 로 활용되는 const 멤버 함수의 경우 책의 예제처럼 caching 을 하려 한다면 멤버변수의 수정이 불가피 할 것이고, 이런 경우 피할 수 없는 것이 mutable 과 thread safety 이므로 이를 설명하기 위한것이다 라는 의견도 있었습니다.(@romandev)

잠정적으로 아래의 Herb Sutter의 강의를 통해서 C++98 대비 C++11부터 "const" 에 대한 정의가 아래와 같이 변경되었고 변경된 C++11에서 const 멤버함수는 정의에 따라서 thread satety 하게 작성해야 한다로 판단하기로 하였습니다. 동영상 링크

C++98 : const == logically const C++11 : const == thread safe (bitwise const or internally synchronized)

romandev commented 7 years ago

이것은 아마도 우리가 마지막에 결론 내린 내용이 맞는 것 같습니다. https://softwareengineering.stackexchange.com/questions/274548/const-means-thread-safe