Использование потоков для хеширования паролей не является особенно интуитивным или заведомо полезным подходом, поэтому неясно , почему кто-то захочет это сделать.
Предположительно, расчеты для хеширования разбитыдо некоторой степени: возможно, один поток обрабатывает пароли, начинающиеся с A
до M
, а другой - N
до Z
, или какое-то подобное разбиение.Одной из идей будет запускать одну и ту же функцию несколько раз с параметром, который определяет, какой раздел выполнять.Вот простая, работающая программа, которая демонстрирует структуру.
#include <iostream>
#include <pthread.h>
static void *calc_func (void *arg)
{
int param = (int) arg;
if (param == 1)
{
// do first partition of calculation
// ...
std::cout << "partition 1" << std::endl;
}
else
{
// do second partition of calculation
// ...
std::cout << "partition 2" << std::endl;
}
}
int main (...)
{
// ...
pthread_t threadh[2];
if (pthread_create (&threadh[0], NULL, calc_func, (void *)1) != 0)
{
std::cerr << "error creating thread 1" << std::endl;
}
if (pthread_create (&threadh[1], NULL, calc_func, (void *)2) != 0)
{
std::cerr << "error creating thread 2" << std::endl;
}
// wait for threads to exit
pthread_join (threadh[0], NULL);
pthread_join (threadh[1], NULL);
return 0;
}
Чтобы собрать ее в Linux с помощью gcc, используйте команду g++ -pthread filename.c++ -o filename