#include <stdio.h>
#include <pthread.h>
#include "queue.h"

#define N 10000

void *writer(void *arg) {
  queue *q = (queue *)arg;
  int i;
  for (i = 0; i < N; i++) {
    queue_add(q, i);
  }
  return NULL;
}

void *reader(void *arg) {
  queue *q = (queue *)arg;
  int c;
  for (c = 0; c < 2*N; c++) {
    int i = queue_take(q);
    printf("%d\n", i);
  }
  return NULL;
}

int main(void) {
  queue *q = queue_create();
  pthread_t r, w, w2;
  pthread_create(&r, NULL, reader, q);
  pthread_create(&w, NULL, writer, q);
  pthread_create(&w2, NULL, writer, q);
  pthread_join(w, NULL);
  pthread_join(w2, NULL);
  pthread_join(r, NULL);
  queue_free(q);
  return 0;
}
