c++ - 代码生成 - usleep 与 std::this_thread::sleep_for

标签 c++ c++11

我正在尝试评估 usleep 与 std::this_thread::sleep_for 并查看使用 std::this_thread::sleep_for 与 usleep 时生成的更多指令。

结果在这里: https://godbolt.org/g/ZyCCmj

int main(int, char**)
{
    std::this_thread::sleep_for(std::chrono::milliseconds{30});
    usleep(30000);
    return 0;
}

我在 usleep 中看到 < 10 条指令,但在使用 std::this_thread::sleep_for 时看到 > 20 条指令。

与 std::this_thread::sleep_for 相比,usleep 更有效的结论是否正确?

最佳答案

Is it true to conclude that usleep is much more efficient compared to std::this_thread::sleep_for?

没有。在你上面的代码中,nanosleep(2) 是一个系统调用,usleep(3) 是一个库函数。 usleep(3) 内部调用 nanosleep(2)。因此,如果您使用 usleep(3),您将无法在自己的程序中看到这些汇编代码,但它们存在于库函数本身中。

但是,如果您的程序旨在休眠,那么讨论休眠函数的性能可能毫无意义。

此外,std::this_thread::sleep_for 更具可移植性,应该是首选。 usleep() 甚至在 POSIX standard 中被标记为已过时.

关于c++ - 代码生成 - usleep 与 std::this_thread::sleep_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49081422/

相关文章:

c++ - 为什么 std::pair 类标准更改为不允许在 C++11 中仅具有非常量复制构造函数的类型?

c++ - 返回右值引用和 && 限定函数中的值之间的区别

c++ - clang 编译器发出的错误 "bash: line 7: 4913 Killed"是什么?

c++ - Boost C++ 跨平台 (Windows & Mac) std::wstring 序列化

C++ STL 内存分配器编译错误

c++ - 删除不同线程中的对象会导致崩溃?

c++ - C++11赋值运算符副作用的求值顺序

c++ - std::map 中键类型的赋值运算符要求

c++ - QPropertyAnimation : Immedately jump to end of animation?

c++ - 来自非静态函数的 SetTimer