int main(int argc, char *argv[]) { std::atomic<bool> keep_working(true); concurrent_queue<std::vector<char> > q; std::thread producer_thread(std::bind(&producer, std::ref(keep_working), std::ref(q))); for (size_t i = 0; i != 100000; ++i) { std::vector<char> tmp; q.wait_and_pop(tmp); } keep_working.store(false); producer_thread.join(); return EXIT_SUCCESS; }
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; }
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; }