현재 pthread를 사용하고 있는데, 1 초 동안 대기하고 로그 파일에 쓰고 화면에 인쇄합니다. 내 int main()에서는 while 루프가 영원히 계속 실행되지만 결국 멈출 것이다. 이 루프에서는 내 싱글 톤 클래스 인 로거에 액세스하고 쓰기 작업을 수행하며 화면에도 인쇄합니다. 여기에 초를 기다리는 스레드 함수 ... 여기싱글 톤 클래스에 액세스하는 두 개의 스레드 - 올바르게 작동하지 않습니다.
void Beacon::send(){
while(1){
sleep(1);
Logger* logger = Logger::getInstance();
logger->log("Sending");
}
}
또한 로거에 인쇄 while 루프는
Logger* Logger::getInstance(){
if(logger == NULL){
logger = new Logger();
}
return logger;
} 여기
... 로거 인스턴스 funciton를 얻을 수있어 것입니다 . checkQueue의 funciton는
while(!a){
logger->getInstance()->log("Checking...");
checkQueue();
if(a == true)
break;
}
나는 그것이 while 루프 로그인이
은, 그것은 단지 화면으로 확인 인쇄 할 것입니다 ... 지금 아무것도하지 않습니다. 내가 주석을 달아 주면 화면으로 전송됩니다. get 인스턴스 함수에서 이중 잠금 검사가 필요합니까? 나는 그것을 조사하려고 노력했지만 그것을 구현하는 방법을 이해하지 못한다.
내가 어떤 스레드를 볼 수 없습니다 또는 거기에 코드를 잠그십시오. 또한 소위 "Mayer"싱글 톤 패턴을 추천합니다. https://stackoverflow.com/questions/1008019/c-singleton-design-pattern – Galik
이 C++ 11 또는 C++ 03입니까? –
메인 루프 내부에서 잠을 자면 '신호'의 '보내기'가 나타나기 시작합니까? 당신은 당신의 잠금 코드를 보여주지 않았지만, 메인의 루프가 너무 빡빡하고 잠금 장치를 너무 자주 잡아서 '비컨 (Beacon)'이 잠금 장치를 잡는 것을 거의 불가능하게 만들 가능성이 있습니다. –