Beispiel #1
0
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();
}
Beispiel #2
0
    bool
    test2()
    {
        std::thread prod(
            [](){ for(D::Msg i = 1; i < iterations; ++i) Put() = i; });

        bool status1;
        bool status2;
        bool status3;
        std::thread consumer1([&]{consume<D, Get1>(1, status1);});
        std::thread consumer2([&]{consume<D, Get2>(2, status2);});
        consume<D, Get3>(3, status3);
        prod.join();
        consumer1.join();
        consumer2.join();

        return true;
    }
int main() {

  std::shared_ptr<BlockingQueue<int> > int_queue(new BlockingQueue<int>(10));

  std::thread producer1(Producer(), std::ref(*int_queue));
  std::thread producer2(ProducerWaiter(), std::ref(*int_queue));
  std::thread consumer1(ConsumerWaiter(), std::ref(*int_queue));
  std::thread consumer2(ConsumerWaiter(), std::ref(*int_queue));

  /** producers and consumers are blocked, useless */
  producer1.join();
  producer2.join();

  consumer1.join();
  consumer2.join();

  return 0;
}
int main()
{
    producer_consumer_queue queue;

    for (int i = 1; i <= 10000; ++i)
        queue.enqueue(i);

    int sum1;
    int sum2;

    std::thread consumer1(gauss, std::ref(queue), std::ref(sum1));
    std::thread consumer2(gauss, std::ref(queue), std::ref(sum2));
    
    consumer1.join();
    consumer2.join();

    std::cout << "sum1: " << sum1 << std::endl;
    std::cout << "sum2: " << sum2 << std::endl;
    std::cout << "The sum is: " << sum1 + sum2 << std::endl;

	std::cout << "Press any key to continue...\n";
	std::getchar();
}
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();
}