ConcurrentSkipListMap visibility guarantees
Alexandre De Champeaux via Concurrency-interest <[email protected]> Thu, 4 Jun 2020 00:57:37 +0000
| Newsgroups | gmane.comp.java.jsr.166-concurrency |
|---|---|
| Message-ID | <[email protected]> |
Hello concurrency interest,
I just came across some old code that concurrently does the following:
1. Remove Object o from ConcurrentSkipListMap
2. Mutate Object o
3. Add Object o back
Sometimes, the remove will fail.
I was wondering how badly this is abusing the guarantees of ConcurrentSkipListMap, and what makes the remove fail?
Here is some code that reproduces (tried with Java 8u241 and 13.0.2):
public class ConcurrentSkipListMapMissingRemove {
private final static AtomicLong SEQUENCE_CREATOR = new AtomicLong();
private final static Comparator<DummyTimer> myTimerComparator = Comparator.comparing(DummyTimer::getSequence);
private final static ConcurrentSkipListMap<DummyTimer, Long> theTimers = new ConcurrentSkipListMap<>(myTimerComparator);
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 10; ++i) {
CompletableFuture.runAsync(() -> {
DummyTimer myDummyTimer = new DummyTimer();
myDummyTimer.start();
while (true) {
myDummyTimer.restart();
}
});
}
Thread.sleep(100_000_000);
}
private static class DummyTimer {
private volatile long theSequence;
void start() {
add();
}
void restart() {
remove();
theSequence = SEQUENCE_CREATOR.getAndIncrement();
add();
}
private void add() {
theTimers.put(this, theSequence);
}
private void remove() {
if (theTimers.remove(this) == null) {
System.out.println("Ooops, failed to remove...");
}
}
public long getSequence() {
return theSequence;
}
}
}
Thanks,
Alex
[IMC Logo]<https://www.imc.com/us/>
[F]<https://www.facebook.com/IMCTrading>
[t]<http://twitter.com/IMCTrading>
[I]<https://www.instagram.com/imctrading/>
[in]<https://www.linkedin.com/company/imc-financial-markets>
imc.com<https://www.imc.com/us/>
________________________________
The information in this e-mail is intended only for the person or entity to which it is addressed.
It may contain confidential and /or privileged material. If you are not the intended recipient, please notify us immediately and delete it from your system. Any other use or disclosure by you, including through automated tools operating on your systems is prohibited.
_______________________________________________
Concurrency-interest mailing list
[email protected]
http://cs.oswego.edu/mailman/listinfo/concurrency-interest