int main() { std::thread producer1(producer, 0, 10); std::thread producer2(producer, 10, 20); std::thread producer3(producer, 20, 30); std::thread consumer1(consumer, 20); std::thread consumer2(consumer, 10); producer1.join(); producer2.join(); producer3.join(); consumer1.join(); consumer2.join(); }
void test_multi() { sc::blocking_queue<MyMovableStr> queue{}; auto take = [&](size_t count) { for (size_t i = 0; i < count; i++) { MyMovableStr el{""}; bool success = queue.take(el); slassert(success); slassert(42 == el.get_val().size()); } }; auto put = [&](size_t count) { TestStringGenerator gen{}; for (size_t i = 0; i < count; i++) { std::string str = gen.generate(42); queue.emplace(std::move(str)); } }; std::thread producer1(put, 100); std::thread producer2(put, 100); std::thread producer3(put, 100); std::thread consumer1(take, 50); std::thread consumer2(take, 50); std::thread consumer3(take, 50); std::thread consumer4(take, 50); std::thread consumer5(take, 50); std::thread consumer6(take, 50); producer1.join(); producer2.join(); producer3.join(); consumer1.join(); consumer2.join(); consumer3.join(); consumer4.join(); consumer5.join(); consumer6.join(); }