My question is, is the class included below for a single-reader single-writer queue class thread-safe? This kind of queue is called lock-free, even if it will block if the queue
I suspect it is not thread safe - imagine the following scenario:
two threads enter cursor.Write
. The first gets as far as line node = new Node(x, node);
in the true half of the if (current == BUFFER_SIZE)
statement (but let's also assume that current == BUFFER_SIZE
) so when 1 gets added to current
then another thread coming in would follow the other path through the if statement. Now imagine that thread 1 loses its time slice and thread 2 gets it, and proceeds to enter the if statement on the mistaken belief that the condition still held. It should have entered the other path.
I haven't run this code either, so I'm not sure if my assumptions are possible in this code, but if they are (i.e. entering cursor.Write from multiple threads when current == BUFFER_SIZE
), then it may well be prone to concurrency errors.