Как уже упоминалось в комментариях, вы блокируете мьютекс на всю продолжительность функции, поэтому код на самом деле является последовательным. Вам нужен мьютекс, только если несколько потоков обращаются к одной и той же памяти и хотя бы один пишет.
В случае суммирования векторных элементов вам нужно иметь только несколько потоков, записывающих в одну и ту же память при добавлении окончательного результата, поэтому вы можете изменить функцию на:
static std::mutex mtx;
void vector_multiplication_concurrent(std::vector const & v1,
std::vector const & v2,
int start_ind, int end_ind,
int & result) {
// fully parallel part
// v1 and v2 are shared, but you are only reading
int temp = 0;
for (int ind = start_ind; ind <= end_ind; ++ind) {
temp += v1[ind] * v2[ind];
}
// only this requires you to synchronize access
// result is shared and you are writing to it
std::lock_guard lck(mtx);
result += temp;
}
PS: I настоятельно рекомендую вам использовать итераторы вместо индексов. Также обратите внимание, что ваш цикл в основном переписан как std::inner_product
. Использование этого вместо простого цикла сделает ваш код более выразительным.
Получите Панель инструментов Веб-разработчика для Firefox. С ним можно отключить JavaScript в любое время, отключить куки, CSS, независимо от того, что Вы хотите.
Это не ответ на универсальный вопрос, "как отключить JavaScript", но было хорошим решением для меня.
Я прекратил использовать Ajax Microsoft вместо jQuery.
В результате этого я использую незаметный JavaScript, и поэтому намного легче отключить просто обработчик Ajax для моей формы, чем это с Microsoft Ajax.
Все, что я делаю, комментируют строку, которая поднимает трубку вызов Ajax к моей кнопке отправки.