#c #multithreading #pthreads
#c #многопоточность #pthreads
Вопрос:
#include <stdio.h>
#include <pthread.h>
#define MAX_THREAD 4
long long int arr1[100];
long long int arr2[100];
int n,m;
int part = 0;
void* array_search(void* arg){
int thread_part = part ;
//printf("%dn",thread_part);
if(part==4)
{
for(int i = thread_part *(n/4) ; i < n ; i ){
for(int j = thread_part*(m/4) ; j < m;j ){
if(arr1[i] == arr2[j]){
printf("%lldn", arr1[i]);
}
}
}
}
else{
for(int i = thread_part *(n/4) ; i < ((thread_part 1) *(n/4)) ; i ){
for(int j = thread_part*(m/4) ; j < ((thread_part 1) *(m/4));j ){
if(arr1[i] == arr2[j]){
printf("%lldn", arr1[i]);
}
}
}
}
}
int main()
{
printf("Enter the element in First Array:");
scanf("%d", amp;n);
for(int i = 0 ; i < n; i ){
scanf("%lld",amp;arr1[i]);
}
printf("Enter the element in Second Array:");
scanf("%d", amp;m);
for(int i = 0 ; i < m; i ){
scanf("%lld",amp;arr2[i]);
}
pthread_t thread[MAX_THREAD];
for (int i = 0; i < MAX_THREAD; i ){
pthread_create(amp;thread[i], NULL, array_search, (void*)NULL);
}
for (int i = 0; i < MAX_THREAD; i ){
pthread_join(thread[i], NULL);
}
return 0;
}
На самом деле в моем коде есть проблема. Когда я ввожу следующий ввод, он ничего не выводит. Я не понимаю, почему это происходит.
Enter the element in First Array:3
2000 4000 5000
Enter the element in Second Array:4
2000 70000 40000 300000
(no output here)
Комментарии:
1. У вас происходит гонка данных
part
. Не уверен, чегоif(part==4) ... else ..
предполагается достичь. Что еще более важно, нужно ли использовать потоки для решения этой проблемы? 🙂2. Да, part ==4 говорит, что все потоки запущены, но часть модифицирована потоками, не защищена мьютексом и поэтому может быть повреждена. Ваши диапазоны for не заканчиваются на производных значениях thread_part. Если вы сравниваете первую 1/4 a с первой 1/4 b, вы проверяете 1/16 возможностей.
3. я добавляю часть == 4, потому что для последнего потока я должен рассмотреть все элементы в массиве
4. но я не понимаю, что вы пытаетесь сказать, можете ли вы объяснить это более подробно