#include <iostream>
#include <string>
#include <mutex>
#include <thread>
#include <chrono>
#include <unordered_map>
std::unordered_map<std::string, std::string> map1 ( {{"apple","red"},{"lemon","yellow"}} );
std::mutex mtx1;
std::unordered_map<std::string, std::string> map2 ( {{"orange","orange"},{"strawberry","red"}} );
std::mutex mtx2;
void func() {
std::lock_guard<std::mutex> lock1(mtx1);
std::lock_guard<std::mutex> lock2(mtx2);
std::cout << "map1: ";
for (auto& x: map1) std::cout << " " << x.first << " => " << x.second << ", ";
std::cout << std::endl << "map2: ";
for (auto& x: map2) std::cout << " " << x.first << " => " << x.second << ", ";
std::cout << std::endl << std::endl;
auto it1 = map1.find("apple");
if(it1 != map1.end()) {
auto val = *it1;
map1.erase(it1);
std::this_thread::sleep_for(std::chrono::duration<double, std::milli>(1000));
map2[val.first] = val.second;
}
}
int main ()
{
std::thread t1(func);
std::this_thread::sleep_for(std::chrono::duration<double, std::milli>(500));
std::thread t2(func);
t1.join();
t2.join();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bXV0ZXg+CiNpbmNsdWRlIDx0aHJlYWQ+CiNpbmNsdWRlIDxjaHJvbm8+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgoKc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gbWFwMSAoIHt7ImFwcGxlIiwicmVkIn0seyJsZW1vbiIsInllbGxvdyJ9fSApOwpzdGQ6Om11dGV4IG10eDE7CgpzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtYXAyICgge3sib3JhbmdlIiwib3JhbmdlIn0seyJzdHJhd2JlcnJ5IiwicmVkIn19ICk7CnN0ZDo6bXV0ZXggbXR4MjsKCnZvaWQgZnVuYygpIHsKCXN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrMShtdHgxKTsKCXN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrMihtdHgyKTsKCQoJc3RkOjpjb3V0IDw8ICJtYXAxOiAiOwoJZm9yIChhdXRvJiB4OiBtYXAxKSBzdGQ6OmNvdXQgPDwgIiAiIDw8IHguZmlyc3QgPDwgIiA9PiAiIDw8IHguc2Vjb25kIDw8ICIsICI7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsIDw8ICJtYXAyOiAiOwoJZm9yIChhdXRvJiB4OiBtYXAyKSBzdGQ6OmNvdXQgPDwgIiAiIDw8IHguZmlyc3QgPDwgIiA9PiAiIDw8IHguc2Vjb25kIDw8ICIsICI7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKCQoJYXV0byBpdDEgPSBtYXAxLmZpbmQoImFwcGxlIik7CglpZihpdDEgIT0gbWFwMS5lbmQoKSkgewoJCWF1dG8gdmFsID0gKml0MTsKCQltYXAxLmVyYXNlKGl0MSk7CgkJc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGUsIHN0ZDo6bWlsbGk+KDEwMDApKTsKCQltYXAyW3ZhbC5maXJzdF0gPSB2YWwuc2Vjb25kOwoJfQp9CgppbnQgbWFpbiAoKQp7CglzdGQ6OnRocmVhZCB0MShmdW5jKTsKCXN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlLCBzdGQ6Om1pbGxpPig1MDApKTsKCXN0ZDo6dGhyZWFkIHQyKGZ1bmMpOwoJdDEuam9pbigpOwoJdDIuam9pbigpOwoKCXJldHVybiAwOwp9
map1: lemon => yellow, apple => red,
map2: strawberry => red, orange => orange,
map1: lemon => yellow,
map2: apple => red, strawberry => red, orange => orange,