public static void evaluate_queue(String type) {
		System.out.println("Evaluating " + type + " queue +++++++++++++++++++");
		int total_ops = 25000;
		int[] n_threads_arr = {2, 3, 4, 5, 6};
		for (int t = 0; t < n_threads_arr.length; t++) {
			int n_threads = n_threads_arr[t];
			System.out.println("For " + n_threads + " threads: ------------------------");
			MyQueue<Integer> q = null;
			
			if (type.equals("lock-based")) {
				q = new LockBasedQueue<Integer>();
			}
			else if (type.equals("lock-free")) {
				q = new LockFreeQueue<Integer>();
			}
			else {
				System.err.println("ERROR: no such queue implemented");
				System.exit(-1);
			}
			
			int n_enq = 0;
			int n_deq = 0;
			long enq_time = 0;
			long deq_time = 0;
			
			for (int i = 0; i < 100; i++) {
				q.enq(-i);
			}
			
			int r = total_ops % n_threads;
			QueueThread[] threads = new QueueThread[n_threads];
			for (int i = 0; i < threads.length; i++) {
				int n_ops_per_thread = total_ops/n_threads;
				if (i < r) {
					n_ops_per_thread++;
				}
				threads[i] = new QueueThread(q, n_ops_per_thread);
			}
			
			for (int i = 0; i < threads.length; i++) {
				threads[i].start();
			}
			for (int i = 0; i < threads.length; i++) {
				try {
					threads[i].join();
					n_enq += threads[i].n_enq;
					n_deq += threads[i].n_deq;
					enq_time += threads[i].enq_time;
					deq_time += threads[i].deq_time;
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			long q_time = enq_time + deq_time;

			double throughput = (Math.pow(10, 9))*(n_deq+n_enq)/(q_time + 0.0);
			System.out.println("Overall time taken = " + q_time + " ns");
			System.out.println("Overall throughput: " + throughput + " ops/s");			
		}
	}