]> git.itanic.dy.fi Git - sudoku/commitdiff
generator: Stop processing work if there is nothing to do
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 20 Jun 2009 18:29:02 +0000 (21:29 +0300)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 20 Jun 2009 18:29:02 +0000 (21:29 +0300)
sudoku.cpp

index 4d5d288dcd7bf44f74176f7b05992dbd131c0e64..bd838dfe85f9d15b576c78f27b2507177aa2b394 100644 (file)
@@ -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<sudoku> 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;