내 코드가 종료되지 않는 이유를 모르겠습니다. 내가 여기에 놓친 것은 분명히 분명한 것입니다. 도와주세요!C++ 스레드 프로그램이 종료되지 않습니다
using namespace std;
int main(int argc, char* argv[])
{
MyClass *m = new MyClass();
thread t1(th,m);
delete m;
m=NULL;
t1.join();
return 0;
}
void th(MyClass *&p)
{
while(p!=NULL)
{
cout << "tick" << endl;
this_thread::sleep_for(chrono::seconds(1));
}
return;
}
'while (p! = NULL)'루프 내부에 절대 쓰여지지 않아서이 루프를 무한 루프로 바꿀 수 있기 때문에 'p'가 변경되지 않는다고 가정하면 컴파일러 최적화로 인한 것일 수 있습니다. 'volatile' 스토리지 클래스 지정자를 파라미터'p'에 추가 해보십시오 : 이것은 컴파일러에게 변수가 포함하는 것에 대해 아무 것도 생각할 수 없다는 것을 알려주기 때문에 매번 메모리에서 다시 읽습니다 (최소한 C++ 03 ; 나는 C++ 11에서 의미가 바뀌 었다고 생각하지만). –
@j_random_hacker : 아니요, '휘발성'을 사용하지 마십시오 : 여러 스레드에서 액세스 할 때 필요한 동기화 또는 원 자성을 제공하지 않습니다 (기본 하드웨어에서 이러한 속성을 제공하는 일부 플랫폼에서는 우연히 "작동"할 수 있지만 isn 휴대용 솔루션). 'std :: atomic' 또는 뮤텍스 (mutex)로 보호해야합니다. –
또한 공유 변수를 폴링하는 대신 스레드 통신을위한 조건 변수를 살펴보십시오. – stefaanv