2013-03-22 2 views

답변

1

갑자기 작업을 중단하거나 루프를 멋지게 남기고 싶은가요?

는 첫 번째 경우를 들어 당신은 아마 두 번째 경우는 아마 인 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()) 그리고 당신은 그것이 작동

+0

종료 할 때 어딘가에 메인 스레드에서 방금 task.finish()를 호출 할 것이다. 감사합니다 – Amit

+3

작은 개선 : "완료"로 선언 "tbb :: 원자 완료;" 뮤텍스는 불필요합니다. –

관련 문제