I've used selectors and poll/select on both FreeRTOS and Zephyr. I've only ever done toy examples using async dispatch, however those worked fine.
Though I could see how running multiple threads/tasks with a unified memory space could be problematic. Still gDisp should be a threadvar. Does NuttX provide thread variables? In Zephyr and FreeRTOS you need to enable it. Also Nim has a mechanism to emulate threadvar, though I've never really tested it and forget the Nim flag to enable it.
