// Copyright 2016 <Biagio Festa>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <thread>
#include <cstring>
#include <cassert>
void reverse_str_mt(char* str,
const size_t len,
const size_t id_thread,
const size_t max_num_threads) {
// Some assertion on input parameters
assert(str != nullptr);
assert(max_num_threads != 0);
// In case the num of threads is greater than the len of the string
if (id_thread > len) {
assert(max_num_threads > len);
return;
}
// Swap operation
for (size_t i = id_thread; i <= len / 2; i += max_num_threads) {
std::swap(str[i], str[len - i - 1]);
}
}
int main(int argc, char *argv[]) {
static constexpr size_t NUM_THREADS = 10;
char str[] = "123456";
const auto len = strlen(str);
std::vector<std::thread> threads;
for (size_t i = 0; i < NUM_THREADS; ++i) {
threads.emplace_back(reverse_str_mt, str, len , i, NUM_THREADS);
}
// Join threads
for (auto& t : threads) {
t.join();
}
std::cout << str << std::endl;
return 0;
}
Ly8gQ29weXJpZ2h0IDIwMTYgPEJpYWdpbyBGZXN0YT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNhc3NlcnQ+Cgp2b2lkIHJldmVyc2Vfc3RyX210KGNoYXIqIHN0ciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpZF90aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1heF9udW1fdGhyZWFkcykgewogIC8vIFNvbWUgYXNzZXJ0aW9uIG9uIGlucHV0IHBhcmFtZXRlcnMKICBhc3NlcnQoc3RyICE9IG51bGxwdHIpOwogIGFzc2VydChtYXhfbnVtX3RocmVhZHMgIT0gMCk7CgogIC8vIEluIGNhc2UgdGhlIG51bSBvZiB0aHJlYWRzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuIG9mIHRoZSBzdHJpbmcKICBpZiAoaWRfdGhyZWFkID4gbGVuKSB7CiAgICBhc3NlcnQobWF4X251bV90aHJlYWRzID4gbGVuKTsKICAgIHJldHVybjsKICB9CgogIC8vIFN3YXAgb3BlcmF0aW9uCiAgZm9yIChzaXplX3QgaSA9IGlkX3RocmVhZDsgaSA8PSBsZW4gLyAyOyBpICs9IG1heF9udW1fdGhyZWFkcykgewogICAgc3RkOjpzd2FwKHN0cltpXSwgc3RyW2xlbiAtIGkgLSAxXSk7CiAgfQp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTlVNX1RIUkVBRFMgPSAxMDsKICBjaGFyIHN0cltdID0gIjEyMzQ1NiI7CiAgY29uc3QgYXV0byBsZW4gPSBzdHJsZW4oc3RyKTsKCiAgc3RkOjp2ZWN0b3I8c3RkOjp0aHJlYWQ+IHRocmVhZHM7CiAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOVU1fVEhSRUFEUzsgKytpKSB7CiAgICB0aHJlYWRzLmVtcGxhY2VfYmFjayhyZXZlcnNlX3N0cl9tdCwgc3RyLCBsZW4gLCBpLCBOVU1fVEhSRUFEUyk7CiAgfQoKICAvLyBKb2luIHRocmVhZHMKICBmb3IgKGF1dG8mIHQgOiB0aHJlYWRzKSB7CiAgICB0LmpvaW4oKTsKICB9CgogIHN0ZDo6Y291dCA8PCBzdHIgPDwgc3RkOjplbmRsOwogIHJldHVybiAwOwp9Cgo=