I could not find anything in the OpenCL 1.1 standard that talks about preemption of event callback functions by other event callback functions. Could someone enlighten me on this? What happens if multiple OpenCL events register the same callback function to trigger on event completion, and all of the events complete? Are there any guarantees that only a single instance of the callback will be in progress at any given time? If not, is there a way to get a shared callback to run like a critical section? Would spinlocks suffice or are there again no guarantees about progression of state through blocking lock requests?