Запуск потока в каждом блоке, вероятно, не является правильным подходом - создание и уничтожение потоков является дорогостоящей операцией (насколько многое зависит от операционной системы).
Такая стратегия может сработать:
- определяет, сколько всего блоков необходимо зашифровать
- определяет, сколько потоков вы хотите использовать
Это даст вам количество блоков, которое должен обработать каждый поток.Затем вы должны обработать первые n блоков с потоком один, следующие n блоков с потоком 2 и т. Д. *
Аргументы, которые поток получит при запуске, могут быть просто:
- смещение во входной буфер для чтения из
- смещение в выходной буфер для записи в
- количество блоков, которые он должен обработать
Как только все потоки запущены, ваш основной поток долженприсоединяйтесь ко всем рабочим потокам, и все готово.
Поскольку все потоки будут работать в разных областях памяти, вам не нужно беспокоиться о синхронизации между этими доступами.
Однако здесь есть одна загвоздка: если ваш ввод не кратен размеру блока, последний блок, вероятно, нужно обрабатывать с осторожностью (заполнение).В этом случае я бы посоветовал разобраться с последним блоком в главном потоке, прежде чем ждать окончания рабочих.
Как сказано в комментариях, в большинстве случаев следует избегать ЕЦБ.Поскольку это для образовательных целей, то проблем нет.Предложение: как только вы начнете работать с ECB, возможно, попробуйте что-нибудь в режиме CTR (который также можно распараллелить)?