My multicore machine is receiving packets and distributes them evenly (sort-of round robin) among its cores. Each core should decide whether to let the packet pass or drop it, depending solely on its origin address.
I need to find lock-less algorithm and data structure to allow this. Can you help?
If you are happy to use Java, or look at the design of Java source, you could chose a random key and then retrieve a queue from http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html. Given the queue, you could add the packet to it without blocking if it was a http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html
Much of java.util.concurrent is due to Doug Lea, who has information on it at http://gee.cs.oswego.edu/dl/concurrency-interest/index.html.
Possibly overkill for your particular problem, but might satisfy a general request for info on data structures in this area.