Я пытаюсь зашифровать изображение BMP, пиксель за пикселем, и я использую pthread для их параллельного шифрования.
Мой код выглядит примерно так:
struct arg_struct {
int arg1;
int arg2;
...
};
void* print_message(void* arguments) {
struct arg_struct* args = (struct arg_struct*)arguments;
//Encryption...
// exit from current thread
pthread_exit(NULL);
}
void multiThreadExample() {
cout << "Start..." << endl;
const int NUMBER_OF_THREADS = 50000; // number of pixels
pthread_t thread[NUMBER_OF_THREADS];
arg_struct arg[NUMBER_OF_THREADS];
for (int i=0;i<NUMBER_OF_THREADS;i++) {
arg[i].arg1 = i;
arg[i].arg2 = ... // give values to arguments in arg_struct
pthread_create(&thread[i], NULL, print_message, static_cast<void*>(&arg[i]));
}
for(int i = 0; i < NUMBER_OF_THREADS; i++) {
pthread_join(thread[i], NULL);
}
cout << "Complete..." << endl;
//streaming results to file using filebuf
}
int main() {
multiThreadExample();
return 0;
}
Это работает хорошо, если изображение всего 3 * 3.
Если изображение становится больше, например, 240 * 164, программа зависает ПОСЛЕ , распечатывая "Complete ..."
Через несколько минут написано Segmentation fault (core dumped)
.
Я не уверен, что заставляет программу зависать после того, как самая тяжелая часть (шифрование) уже завершена. Это потому, что столько потоков уже заняло все пространство моей памяти? Во время работы он занимал максимум 10G.
На самом деле я пытался сделать это БЕЗ многопоточности, и программа по-прежнему зависает.