Sean said it well, but to repeat: the problem you run into is what to do when a consumer tries to cancel while the callback is running. For example, one CPU might be in the middle of jumping to the consumer's callback when the other CPU enters the cancel function. - R.