package fr.uge.concurrence.exo3;

public class MiddleLockFreeTest {
	public static void main(String[] args) {
		var threads = new Thread[4];
	
		var nbPerThread = 25000; 				// comment for Q3
		var middle = new MiddleLockFreeList();	// comment for Q3
		
//		var nbPerThread = 2500000;											// uncomment for Q3
//		var middle = new MiddleLockFreeArray(nbPerThread * threads.length); // uncomment for Q3

		for (var i = 0; i < threads.length; i++) {
			threads[i] = Thread.ofPlatform().start(() -> {
				var thread = Thread.currentThread().getName();
				for (int j = 0; j < nbPerThread; j++) {
					middle.propose(thread);
				}
			});
		}
		Thread.ofPlatform().daemon().start(() -> {
			for (;;) {
				try {
					Thread.sleep(200);
				} catch (InterruptedException e) {
					throw new AssertionError();
				}
				System.out.println(middle.middle());
			}
		});

		for (int i = 0; i < threads.length; i++) {
			try {
				threads[i].join();
			} catch (InterruptedException e) {
				throw new AssertionError();
			}
		}
		System.out.println(middle.size());
	}
}