Some questions regarding concurrency

From NVIDIA_CUDA_ProgrammingGuide_3.0.pdf…

Two commands from different streams cannot run concurrently if either a page-locked host memory allocation, a device memory allocation, a device memory set, a device <-> device memory copy, or any CUDA command to stream 0 (including kernel launches and host <-> device memory copies that do not specify any stream parameter) is called in-between them by the host thread.

  1. Does event creation via cudaEventCreateWithFlags() also prevent concurrent execution on subsequent launches (i.e. does creating event involve device memory allocation)?

Also, one more question regarding events I could not find answer for…

  1. Can event be reused on the same/different streams multiple times? I mean, if an event is created, is recorded with cudaEventRecord() and waited with cudaEventSynchronize(), can the same event instance be later reused more times or event signalling alters its state permanently and it is necessary to create an individual event instance for every synchronization operation?