From: Timo Kokkonen Date: Sat, 20 Jun 2009 18:29:02 +0000 (+0300) Subject: generator: Stop processing work if there is nothing to do X-Git-Url: http://git.itanic.dy.fi/?p=sudoku;a=commitdiff_plain;h=2db3b4a4c16b4957482ee17aa52aeb50e1e3adab generator: Stop processing work if there is nothing to do --- diff --git a/sudoku.cpp b/sudoku.cpp index 4d5d288..bd838df 100644 --- a/sudoku.cpp +++ b/sudoku.cpp @@ -498,14 +498,15 @@ sudoku sudoku::remove_randomly(int min_guesses, int depth) { int count = used_numbers(); sudoku result; + int stop = 0; -#pragma omp parallel for +#pragma omp parallel for firstprivate(stop) for (int i = 0; i < count; i++) { int x, y; sudoku tmp = *this, tmp2; std::vector results; - if (done) + if (done || stop) continue; /* remove a number */ @@ -564,7 +565,7 @@ sudoku sudoku::remove_randomly(int min_guesses, int depth) sudoku empty; //printf("%d, Got multiple results\n", depth); result = empty; - #pragma omp flush(done) + stop = 1; } if (results.empty() && !done) { @@ -572,8 +573,6 @@ sudoku sudoku::remove_randomly(int min_guesses, int depth) depth); sudoku empty; result = empty; - done = 1; - #pragma omp flush(done) } } return result;