27 std::cout <<
"=== Thread-Safe RCU Container Example ===" << std::endl;
30 value_container shared_container;
31 std::mutex container_mutex;
33 shared_container.set(
"counter",
static_cast<int64_t
>(0));
34 shared_container.set(
"status", std::string(
"initializing"));
37 std::cout <<
"\n1. Concurrent writes (5 threads):" << std::endl;
38 std::atomic<int> write_count{0};
39 std::vector<std::thread> writers;
41 for (
int i = 0; i < 5; ++i)
46 for (
int j = 0; j < 10; ++j)
48 std::lock_guard<std::mutex> lock(container_mutex);
49 std::string key =
"thread_" + std::to_string(i) +
"_item_" + std::to_string(j);
50 shared_container.set(key, std::string(
"value_" + std::to_string(j)));
51 write_count.fetch_add(1);
56 for (
auto& t : writers)
60 std::cout <<
" Total writes: " << write_count.load() << std::endl;
61 std::cout <<
" Container size: " << shared_container.size() << std::endl;
64 std::cout <<
"\n2. Concurrent reads (3 threads):" << std::endl;
65 std::atomic<int> read_count{0};
66 std::vector<std::thread> readers;
68 for (
int i = 0; i < 3; ++i)
73 std::lock_guard<std::mutex> lock(container_mutex);
74 auto size = shared_container.size();
75 read_count.fetch_add(1);
76 std::cout <<
" Reader " << i <<
" sees " << size <<
" entries" << std::endl;
80 for (
auto& t : readers)
84 std::cout <<
" Total reads: " << read_count.load() << std::endl;
87 std::cout <<
"\n3. Snapshot (copy-on-read):" << std::endl;
88 std::shared_ptr<value_container> snapshot;
90 std::lock_guard<std::mutex> lock(container_mutex);
91 snapshot = shared_container.copy(
true);
93 std::cout <<
" Snapshot size: " << snapshot->size() << std::endl;
94 std::cout <<
" Original size: " << shared_container.size() << std::endl;
96 std::cout <<
"\nDone." << std::endl;