A Tokio semaphore is used unconditionally, so compilation fails with tokio feature disabled. This has been broken for 1 year and 8 months and no one complained, but it's possible that users who rely on async-std support just don't disable Tokio support. We should use something small and lightweight like https://github.com/smol-rs/async-lock instead when #![cfg(not(feature = "tokio"))].