C++로 문제를 해결하는 방법을 찾고 있습니다.그 중 하나가 이전에 종료되었을 때 모든 스레드를 종료하십시오. С ++
자세한 설명 (간단한 설명은 다음과 같습니다) :
나는 스도쿠 솔버를 쓰고 있어요. 나는 이미 bruteforce 메서드를 만들었으며 (어떤 행이 동일한 행, 열 및 사각형에서 이미 사용되었는지 확인) 이제는 "경험적"다중 스레드 메서드를 사용하려고합니다. 이 경험적 방법은 프로그램이 가능한 값이 1보다 큰 셀을 발견하면이 셀에 가능한 첫 번째 값을두고 해당 셀에서 bruteforce를 시도한다는 것을 의미합니다. 그것이 우익으로 인도한다면! 없으면이 셀에 대해 가능한 두 번째 값을 시도합니다. 그리고 가능한 값의 배열이 끝나기 전에 계속됩니다. 그런 다음 두 번째 빈 셀 등을 사용하여 동일한 작업을 시도합니다. '다중 스레드'에서 첫 번째 스레드는 첫 번째 빈 셀에서 시작하여이 알고리즘을 실행하고 두 번째 스레드는 두 번째 빈 셀에서 시작합니다. 그래서이 문제는 다음과 같습니다
이간략한 설명 : 나는 N 스레드를 만들려면, 그리고 그들 각각의 적합한 솔루션을 찾아 주 스레드로 다시 돌아 동일한 확률을 가지고
(또는 쓰기 그것은 주 스레드에서 기다리고있는 초기 변수에 대한 참조에 의해). 그 중 하나가 나에게 (나 == 메인 스레드) 그것이 해결책을 찾았다 고 말하면 모든 스레드를 멈추는 방법을 찾고 있습니다.
감사합니다.
P. 알고리즘 개선 방법에 대한 아이디어가 있으시면 언제든지 알려 주시면 감사하겠습니다.
UPD 만 GNU/리눅스에 실행
스레드에 대해 배울 때 뮤텍스와 조건 변수에 대해서도 배워야합니다. 이 경우 뮤텍스를 보호하는 간단한 'bool'만으로도 충분합니다. –
에는 foundSolution이라는 부울 변수가 있습니다. 각 스레드가 주 루프에서 매번 설정되는지 확인하려고합니다. – pm100
아마도 [std :: atomic_bool] (http://en.cppreference.com/w/cpp/atomic/ 원자) 여기 유용 할 것입니다. – Galik