implement a non-blocking mechanism