2010-12-27 3 views
2

C++의 쓰레드에 문제가 있습니다.세터와 스레드

두 개의 스레드가 실행 중입니다. 하나는 클라이언트를 실행하고 다른 하나는 리스너로 작동합니다. 리스너 스레드는 다음 않는 shutdown() 방법, 호출

shutdown_=true; 
std::cout<<shutdown_<<std::endl; 

shutdown_이 같은 휘발성 설정되고, 리스너 스레드가 shutdown() 메소드를 호출하는 유일한 하나입니다, 그리고 그것은 단지 다른 스레드 동안 액세스 할 수 있습니다 wait() 모드 (Poco synchronizedObject wait())입니다.

어떤 이유인지 cout은 인쇄를 "0"으로 유지하고 처음에는 (xcode를 사용하는 동안) 회선 shutdown_=true이 아무 것도하지 않는다는 경고가 나타납니다. 이 경고는 컴파일 후 사라졌습니다.

뮤텍스 잠금을 사용하여 줄 앞뒤에 잠금 및 잠금 해제를 시도했지만 아무런 효과가 없었습니다. 내가 그것을 사용하는 완전히 대신 기능 shutDown()을 제거 결국, 나는 공개 할 shutDown_을 변경하고, 다음과 같이 수신기 스레드에서 직접 액세스 : 잘 작동

client_->shutdown_=true 

합니다. 나는 그 문제가 무엇인지, 그리고 앞으로 그것을 피하는 방법을 모른다.

감사합니다.

+6

경고 : 컴파일러 경고는별로 의미가 없습니다 ... 실수로 종료하지 않았는지 확인하십시오 _ == true; ? 더 많은 코드를 게시하는 것도 도움이 될 수 있습니다. 다른 메모에 –

+0

, 정확히 어떻게 해결 된 것으로 표시합니까? – Matan

+0

정답의 왼쪽에있는 체크 표시를 클릭하십시오. –

답변

0

귀하는 shutdown_ member volatile을 정의했다고 말씀 하셨다고하셨습니다. 상속 된 기본 변수를 숨기셨습니까?