Пример #1
0
void ServerController::start_server()
{
	is_server_running = true;

	// Create thread for consuming process
	std::thread consumer_thread(&ServerController::consume_command, this);
	consumer_thread.detach();

	//Create server socket
	ServerSocket server_socket(port_number);

	while (true)
	{
		try
		{
			std::cerr << "Server listening" << "\n";
			std::shared_ptr<Socket> socket_client = nullptr;

			while ((socket_client = server_socket.accept()) != nullptr)
			{
				std::thread handler_thread(&ServerController::handle_client, this, socket_client);
				handler_thread.detach();
				std::cerr << "Server listening again" << "\n";
			}
		}
		catch (const std::exception& ex)
		{
			std::cerr << ex.what() << ", resuming..." << "\n";
		}
	}
}
Пример #2
0
int main()
{
    std::thread provider_thread(provider);
    std::thread consumer_thread(consumer);
    provider_thread.join();
    consumer_thread.join();
    return 0;
}
Пример #3
0
int main(int argc, char* argv[])
{
    std::ios::sync_with_stdio(false);

    if (argc < 3) {
        std::cout << "usage: " << argv[0] << " path/to/file size (GB)" << std::endl;
        return 1;
    }

    std::string file(argv[1]);
    std::string size(argv[2]);

    std::string::size_type sz;
    double target_gb = std::stod(size, &sz);
    double target = target_gb * GB_SIZE;

    srand (time(NULL));

    std::vector<std::thread> threads;

    const size_t hardware_concurrency = std::thread::hardware_concurrency();
    double segment_size = target / hardware_concurrency;

    cstorage<std::vector<std::string>> storage;

    for(size_t i = 0; i < hardware_concurrency; i++) {
        threads.push_back(std::thread([&storage, segment_size](){
            producer(storage, segment_size);
        }));
    }

    bool done = false;

    std::thread consumer_thread([&file, &storage, &done](){
        consumer(file, storage, done);
    });

    for(size_t i = 0; i < hardware_concurrency; i++) {
        threads[i].join();
    }

    done = true;

    consumer_thread.join();

    std::cout << "generated: " << file << " size: " << pretty_size(target) << std::endl;

    return 0;
}
int main ()
{
  Hx::thread consumer_thread (consume,10);

  // produce 10 items when needed:
  for (int i=0; i<10; ++i) {
    while (shipment_available()) Hx::this_thread::yield();
    mtx.lock();
    cargo = i+1;
    cv.notify_one();
    mtx.unlock();
  }

  consumer_thread.join();

  return 0;
}
Пример #5
0
int main() {
	// 创建仓库
	auto repository = std::make_shared<Repository>(10);

	// 创建生产者和消费者
	Producer producer(repository);
	Consumer consumer(repository);

	// 分别设定单位工作的耗时
	producer.set_unit_cost(20);
	consumer.set_unit_cost(30);

	auto count = 50;  // 准备生产和消费的产品数量
	std::thread producer_thread([&producer, count] {producer.produce(count); });
	std::thread consumer_thread([&consumer, count] {consumer.consume(count); });

	// 等待线程合并
	producer_thread.join();
	consumer_thread.join();

	return 0;
}
Пример #6
0
int main(void)
{
	struct ringbuffer *ring_buf;
	pthread_t produce_pid, consume_pid; 

	ring_buf = ringbuffer_create(FIFO_SIZE);
	if (!ring_buf) {
		perror("ringbuffer_create()");
		exit(1);
	}

	printf("multi thread test.......\n");

	produce_pid  = producer_thread((void*)ring_buf);
	consume_pid  = consumer_thread((void*)ring_buf);

	pthread_join(produce_pid, NULL);
	pthread_join(consume_pid, NULL);

	ringbuffer_destroy(ring_buf);

	return 0;
}