It's up to you as a programmer to Do The Right Thing, and that depends on the application.
Let's say, "device" is an accelerometer that requires a reset signal, which you need to keep active for 50µs. So you can write code which activates the reset, taking 1µs, and then you can just wait for 49µs, consuming CPU cycles doing nothing useful, and after that, deactivate the reset, again taking 1µs.
Or, if you can't afford waiting 49µs just doing nothing, in other words, if you have some other important thing to do which can't wait, then you can activate the reset and program a timer to generate an interrupt after 49µs, and there, in the interrupt handler, deactivate the reset. Now rest of the program can go on during the wait.
Or, maybe the microcontroller comes with a timer peripheral which can automatically create a 50µs pulse once you program it to do so.
But, in the end, you need to be more specific. There is no one general way of doing things, it depends on what you are actually doing, and what kind of devices you are communicating with.