C++/ detach된 무한 loop thread 종료법이 있나요

Fr_YP의 이미지

#include <iostream>
#include <thread>
 
using namespace std;
 
void func1(){
  while(1){
    cout<< "~~" <<endl;
  }
}
 
int main(){
thread t(func1);
t.detach();
}

메인이 끝나지 않을 경우 쓰레드는 분리되어 무한히 "~~"을 찍어낼텐데
메인에서 detached 스레드를 종료시킬 방법이 있을까요? pthread 안쓰구요...

yhsuk의 이미지

Signature :) - "여유를 갖고 행동하되 게을러지지 말자"

Anti-Lock의 이미지

결국 '무한루프'를 실행하는 스레드의 종료법은 없다는 이야기이군요.

익명 사용자의 이미지

detach를 하지 않았더라도, 원하시는 기능은 현재 std::thread로 구현이 불가능합니다.

std::thread는 스레드 자체의 협조 없이 외부에서 스레드를 강제 종료시킬 방법이 없기 때문이죠. native handle을 얻어다가 pthread 라이브러리로 조작한다던가 하면 가능은 한데 그건 안 된다고 하셨고...

결국 표준 라이브러리 범위 안에서 이식성을 가지게 구현하려면 스레드 자신이 협조적일 수밖에 없습니다. C++ Concurrent in Action의 interruptible_thread 구현을 참고해보세요.