Số documentation for usleep nói rằng gọi usleep(0)
không có hiệu lực. Tuy nhiên, trên hệ thống của tôi (RHEL 5.2) chạy đoạn mã nhỏ của mã C++ bên dưới, tôi thấy rằng nó thực sự dường như có cùng tác dụng như usleep(1)
. Điều này có được mong đợi không, và nếu có, tại sao có sự khác biệt giữa tài liệu và những gì tôi thấy trong đời thực?Ảnh hưởng của việc ngủ (0) trong C++ trên Linux
lục A Mã
:
#include <unistd.h>
int main()
{
for(int i = 0; i < 10000; i++)
{
usleep(1);
}
}
Output:
$ time ./test
real 0m10.124s
user 0m0.001s
sys 0m0.000s
Phụ lục B
Code:
#include <unistd.h>
int main()
{
for(int i = 0; i < 10000; i++)
{
usleep(1);
usleep(0);
}
}
Output:
$ time ./test
real 0m20.770s
user 0m0.002s
sys 0m0.001s
Trong khi các câu trả lời khác đưa ra các lý do khác tại sao điều này xảy ra, tôi nghĩ câu trả lời này tổng hợp tất cả chúng từ mức cao. – Dunnie