0
나는 하나의 문제에 직면하고있다. 하나는 부모 작업이고 하나는 자식 작업이고 다른 하나는 무한 루프를 실행하고 어떤 조건은 만족 스럽다. 자식 실행을 수동으로 종료하고 싶다. TBB에서 내가 할 수있는 일TBB에서 작업을 종료하고 중지하는 방법은 무엇입니까?
나는 하나의 문제에 직면하고있다. 하나는 부모 작업이고 하나는 자식 작업이고 다른 하나는 무한 루프를 실행하고 어떤 조건은 만족 스럽다. 자식 실행을 수동으로 종료하고 싶다. TBB에서 내가 할 수있는 일TBB에서 작업을 종료하고 중지하는 방법은 무엇입니까?
갑자기 작업을 중단하거나 루프를 멋지게 남기고 싶은가요?
는 첫 번째 경우를 들어 당신은 아마 두 번째 경우는 아마 인 destroy 방법에게 코드를 구성 할 수있는 더 좋은 방법을 사용할 수 있습니다. 이제 루프가
while(!finished) {
...
}
당신은 또한 작업 외부에서 액세스 할 수 있도록 finished
변수에 잠금을 사용하려면이 옵션을 변경하고 작업을 원할 때 그 값을 변경할 수 있습니다와 같은 조건을 가지고 있다고 가정 해 봅시다 종료. 변수에 직접 액세스하는 대신 태스크 외부와 내부 모두에서 값을 읽고 쓰려면 다음 함수를 사용해야합니다.
tbb::mutex lock;
bool finished;
void finish() {
lock.lock();
finished = true;
lock.unlock();
}
bool is_finished() {
lock.lock();
bool ret = finished;
lock.unlock();
return ret;
}
그래서 루프 조건이 이제
while(! is_finished())
그리고 당신은 그것이 작동
종료 할 때 어딘가에 메인 스레드에서 방금
task.finish()
를 호출 할 것이다. 감사합니다 – Amit작은 개선 : "완료"로 선언 "tbb :: 원자 완료;" 뮤텍스는 불필요합니다. –