public static ConcurrentQueueSpec createBoundedMpmc(int capacity) { return new ConcurrentQueueSpec(0, 0, capacity, Ordering.FIFO, Preference.NONE); }
public static <E> ConcurrentQueue<E> newQueue(ConcurrentQueueSpec qs) { if (qs.isBounded()) { // SPSC if (qs.consumers == 1 && qs.producers == 1) { return new SpscArrayConcurrentQueue<E>(qs.capacity); } else { return new MpmcArrayConcurrentQueue<E>(qs.capacity); } } return new GenericQueue<E>(); }
if (!spec.isMpmc())
if (qs.isBounded()) { if (qs.isSpsc()) { return getBlockingQueueFrom(SpscArrayQueue.class, takeStratClass, putStratClass, qs.capacity); else if (qs.isMpsc()) { if (qs.ordering != Ordering.NONE) { return getBlockingQueueFrom(MpscArrayQueue.class, takeStratClass, putStratClass, else if (qs.isSpmc()) { return getBlockingQueueFrom(SpmcArrayQueue.class, takeStratClass, putStratClass, qs.capacity); else if (qs.isMpmc()) { return getBlockingQueueFrom(MpmcArrayQueue.class, takeStratClass, putStratClass, qs.capacity); } else { if (qs.isSpsc()) { return getBlockingQueueFrom(SpscLinkedQueue.class, takeStratClass, putStratClass, -1); else if (qs.isMpsc()) { if (UnsafeAccess.SUPPORTS_GET_AND_SET) { return getBlockingQueueFrom(MpscLinkedQueue8.class, takeStratClass, putStratClass, -1);
public static ConcurrentQueueSpec createBoundedSpsc(int capacity) { return new ConcurrentQueueSpec(1, 1, capacity, Ordering.FIFO, Preference.NONE); }
@Test public void testPowerOf2Capacity() { assumeThat(spec.isBounded(), is(true)); int n = Pow2.roundToPowerOfTwo(spec.capacity); for (int i = 0; i < n; i++) { assertTrue("Failed to insert:" + i, queue.offer(i)); } assertFalse(queue.offer(n)); }
if (!spec.isMpmc())
public static ConcurrentQueueSpec createBoundedMpsc(int capacity) { return new ConcurrentQueueSpec(0, 1, capacity, Ordering.FIFO, Preference.NONE); }
@Test public void testPowerOf2Capacity() { assumeThat(spec.isBounded(), is(true)); int n = Pow2.roundToPowerOfTwo(spec.capacity); for (int i = 0; i < n; i++) { assertTrue("Failed to insert:" + i, queue.offer(i)); } assertFalse(queue.offer(n)); }
public static ConcurrentQueueSpec createBoundedSpmc(int capacity) { return new ConcurrentQueueSpec(1, 0, capacity, Ordering.FIFO, Preference.NONE); }
@Test public void testPowerOf2Capacity() { assumeThat(spec.isBounded(), is(true)); int n = Pow2.roundToPowerOfTwo(spec.capacity); for (int i = 0; i < n; i++) { assertTrue("Failed to insert:" + i, queue.relaxedOffer(i)); } assertFalse(queue.relaxedOffer(n)); }
public static Object[] makeQueue(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q) { ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering, Preference.NONE); if (q == null) { q = QueueFactory.newQueue(spec); } return new Object[] {spec, q}; }
@Test public void testSizeIsTheNumberOfOffers() { int currentSize = 0; while (currentSize < SIZE && queue.relaxedOffer(currentSize)) { currentSize++; assertFalse(queue.isEmpty()); assertTrue(queue.size() == currentSize); } if (spec.isBounded()) { assertEquals(spec.capacity, currentSize); } else { assertEquals(SIZE, currentSize); } }
public static Object[] makeAtomic(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q) { ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering, Preference.NONE); if (q == null) { q = AtomicQueueFactory.newQueue(spec); } return new Object[] {spec, q}; }
@Test public void supplyMessageUntilFull() { assumeThat(spec.isBounded(), is(Boolean.TRUE)); final Val instances = new Val(); instances.value = 0; final MessagePassingQueue.Supplier<Integer> messageFactory = () -> instances.value++; final int capacity = queue.capacity(); int filled = 0; while (filled < capacity) { filled += queue.fill(messageFactory, capacity - filled); } assertEquals(instances.value, capacity); final int noItems = queue.fill(messageFactory, 1); assertEquals(noItems, 0); assertEquals(instances.value, capacity); }
public static Object[] makeAtomic(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q) { ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering, Preference.NONE); if (q == null) { q = AtomicQueueFactory.newQueue(spec); } return new Object[] {spec, q}; }
public static Object[] makeMpq(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q) { ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering, Preference.NONE); if (q == null) { q = QueueFactory.newQueue(spec); } return new Object[] {spec, q}; }
public static Object[] makeAtomic(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q) { ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering, Preference.NONE); if (q == null) { q = AtomicQueueFactory.newQueue(spec); } return new Object[] {spec, q}; } @After
public static Object[] makeQueue(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q) { ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering, Preference.NONE); if (q == null) { q = QueueFactory.newQueue(spec); } return new Object[] {spec, q}; }