类似 Futex 的东西

主要观点:多数主流操作系统目前提供某种形式的类似futex的功能,本文介绍了不同操作系统的相关情况及使用注意事项等。
关键信息:

  • Windows:有keyed eventsWaitOnAddressAPI家族两种选择,keyed eventsntdll中,不稳定且无官方文档;WaitOnAddress是Windows 8 API,有兼容性缺点。
  • Darwin(macOS等):有不稳定的__ulock_wait/__ulock_wakeAPI,在私有头文件中,使用时需注意。
  • Android:可像在Linux上一样使用futex,需注意futex.h头文件的问题。
  • 各种BSD:OpenBSD称其为futex,支持常用部分;FreeBSD有_umtx_op;Dragonfly有umtx_sleepumtx_wakeup
  • 其他:C++20标准库新增waitnotify操作;Web平台的JSAtomics对象支持waitnotify;WebAssembly的线程提案也包含相关指令;Fuchsia OS有支持。
    重要细节:
  • Windows中,可先尝试从API-MS-Win-Core-Synch-l1-2-0.dll加载WaitOnAddress函数,失败后 fallback 到ntdll/keyed events
  • Darwin中,C或C++可使用weak_import属性或dlsym进行懒加载处理较老的操作系统或缺失的API;Rust可使用ulock-sys crate。
  • Android中,可在C或C++中定义缺失的futex相关常量,Rust中可在Android上无条件定义常量。
  • 各种BSD中不同系统的具体futex相关函数及支持情况。
阅读 11
0 条评论