我必须使用多线程方法来解决一个非常简单的数独游戏。但我并不太了解线程。
int is_finished(sudoku_t *s){
for(int i=0;i<SUDOKU_SIZE;++i){
for(int j=0;j<SUDOKU_SIZE;++j)
{
if(!correct_row(s,i) || !correct_column(s,j))
return 0;
}
}
for(int i=0;i<SUDOKU_SIZE;i+=3){
for(int j=0;j<SUDOKU_SIZE;j+=3){
if(!correct_box(s,i,j))
return 0;
}
}
return 1;
}
void* solver(void * sudoku_raw) {
sudoku_t * tmp = (sudoku_t *) malloc(sizeof(sudoku_t));
do {
tmp = sudoku_raw;
fill_sudoku_smart(tmp);
}while(is_finished(tmp)==0);
sudoku_raw = tmp;
return (void*) sudoku_raw;
}
void sudoku_solve(sudoku_t * s, int nthread){
pthread_t threads[nthread];
int i;
for (i = 0;i < nthread;i++) {
pthread_create(&threads[i], NULL, solver, s);
}
for (i = 0;i < nthread;i++) {
pthread_join(threads[i], NULL);
}
return;
}
is_finished
查看数独的每个部分(行,列和框是否正确)。 correct_rows / column / box工作得很好。
之后,solver
制作一个循环来填充我的每个数独。
最后,sudoku_solve
,那就是线程被创建了,但它不起作用,而且在我的关卡中,我找不到原因。
谢谢你,如果你可以帮忙,或者你看看。