C에서 다중 스레드 스도쿠 솔루션 유효성 검사기를 작성하는 프로젝트 (숙제가 아님)로 작업하고 있습니다. C 언어에 익숙하지 않아서 코드 품질이 나쁘다고 변명했습니다. 개선.새 스레드에서 호출하는 메소드 C
9 개의 별도 스레드에서 row_check
9 번을 호출하려고합니다. 매개 변수로 메소드의 경우 행 번호 (arg
)와 배열 이름 (arr
)을 전달합니다. 스레드를 만들었지 만 매개 변수를 메서드에 제대로 전달하는 방법을 모르겠습니다. 아무도 이것으로 나를 도울 수 있습니까? 당신이 좋아하는 어떤 포인터 -
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void* row_check(void* arg, int *arr)
{
int i = *((int *)arg); //trying to convert row number to int
int j, flag;
while(i < 9)
{
flag=0x0000;
for(j = 0; j < 9; j++)
flag |= 1 << (arr[i][j]-1);
if (flag != 0x01FF)
report("row", i, j-1);
}
}
void report(char *s, int i, int j)
{
printf("\nThe sudoku is INCORRECT");
printf("\nin %s. Row:%d,Column:%d", s, i+1, j+1);
getch();
exit(0);
}
int main(int argc, char* argv[])
{
int i,j;
char arr1[9][9];
FILE *file = fopen(argv[1], "r");
if (file == 0)
{
fprintf(stderr, "failed");
exit(1);
}
int col=0, row=0;
int num;
while(fscanf(file, "%d ", &num) == 1)
{
arr1[row][col] = num;
col++;
if(col == 9)
{
row++;
col = 0;
}
}
fclose(file);
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
int n;
for(n=0; n < 9; n++) //creating 9 threads
{
pthread_create(&tid, &attr, row_check, n);
pthread_join(tid, NULL);
}
return 0;
}
두 변수를 저장하고 스레드 루틴이 구조 파스하는 구조를 사용할 수 있습니다. 배열 이름 만 전달 하시겠습니까? 즉 문자열입니까, 아니면 배열의 값으로 무엇인가를 하시겠습니까? – Gaurav
'pthread_join'에 대한 매뉴얼을 읽으십시오. 여러분이'for' 루프에서'row_check'를 호출했을 때와 같기 때문입니다. 'pthread_join'은 쓰레드가 끝날 때까지 기다리므로이 쓰레드는 동시에 실행되지 않고 하나씩 실행됩니다. 또한'row_check' ('j-1')의'report'에 전달 된 세 번째 인수는'for' 루프가 끝난 후'j'가 9와 같기 때문에 항상 8입니다. – Rogus
나는 좋은 느낌을 얻지 못합니다. 코드에서 while 루프! 설명해 주시겠습니까? – Gaurav