잠금 및 디자인에 관한 C++의 책을 읽었습니다. 심판과 같은 문 ++ 사소한 보이지만멀티 스레드에서 싱글 톤 사용
void addRef() { ref++; }
void subRef() { if(--ref == 0) delete this; }
, 그것은 원자이다 보장 없습니다. 그러나이 코드를 다시 작성하여 잠금을 추가하기 전에 응용 프로그램에서 잠금을 사용하는 방법을 알아야합니다. 이 에서 subRef 다음에 addRef가 호출되면 버그가 생성됩니다. 문제는 잠금이 누락되지 않았기 때문에 잘못된 디자인입니다. 객체 이 스레드의 범위를 벗어나 지속되어야하는 경우, 범위를 벗어나지 않는 다른 스레드에 의해 생성되고 소유되어야합니다 ( ).
위의 텍스트에 대한 내 질문은 무엇을 저자가 가난한 디자인으로 의미 하는가 방법이 객체가 스레드의 범위를 넘어 지속해야하는 경우 "에 의해 피할 수있다, 그것은 생성하고 소유해야
- 입니다 범위를 벗어나지 않는 다른 스레드. " ? 이것에 대한 예를 들어 줄 것을 요청하십시오.
'std :: atomic'도 잘 동작합니다. 하지만 '이것을 삭제하십시오'는 어쨌든 끔찍한 것입니다. 실제로 카운트 된 객체 내의 참조 카운터는 무엇입니까 – nijansen
실제 질문에 상관없이 질문 제목에 싱글 톤을 언급하는 이유는 무엇입니까? –