Beispiel #1
0
int 
main (int argc, char** argv)
{
  int buff_size = BUFFER_SIZE;
  if (argc == 2)
  {
    buff_size = atoi (argv[1]);
    std::cout << "Setting buffer size to " << buff_size << " frames " << std::endl;
  }
  else
  {
    std::cout << "Using default buffer size of " << buff_size << " frames " << std::endl;
  }
  buff.setCapacity (buff_size);
  std::cout << "Starting the producer and consumer threads..." << std::endl;
  std::cout << "Press Ctrl-C to end" << std::endl;
  boost::thread producer (grabAndSend);
  boost::this_thread::sleep (boost::posix_time::seconds (2));
  boost::thread consumer (receiveAndProcess);
  boost::thread consumer2 (receiveAndProcess);
  boost::thread consumer3 (receiveAndProcess);
  signal (SIGINT, ctrlC);
  producer.join ();
  {
    boost::mutex::scoped_lock io_lock (io_mutex);
    PCL_WARN ("Producer done\n");
  }
  consumer.join ();
  consumer2.join();
  consumer3.join();

  PCL_WARN ("Consumers done\n");
  return (0);
}
Beispiel #2
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 #3
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();
}