什么是实现繁忙循环的最佳方式? 纠正我,如果我错了?
while (1); // obvIoUsly eats cpu. while (1) { sleep(100); } // Not sure if it is the correct way ?
共享对象的实际目的
用户使用C#System.DirectoryServices在远程Windows服务器上进行pipe理
linux共享库支持multithreading应用程序callback
'“SDL.h”编译时没有find这样的文件或目录“
如何在Unix套接字编程中获得本地IP地址和端口?
为了做一个无限的等待,对于一个信号(还有什么)是pause()系统调用。 你必须把它放在一个循环中,因为每当一个信号被传递时它就会返回(总是以-1和errno设置为EINTR):
while (1) pause();
令人好奇的是,AFAIK是唯一被记录为永远失败的POSIX函数。
更新 :感谢dmckee,在下面的评论中, sigsuspend()也总是失败。 它和pause() ,但是更友好。 不同之处在于它具有参数,所以除了EINTR之外,它可以通过EFAULT失败。
忙碌循环是永不停止的循环,并不断检查某些情况。 小的睡眠足以避免100%的cpu使用率。
实现繁忙等待的最好方法是不执行它。 而不是它,你可以使用阻止调用或回调。
Linux已经有一段时间了(POSIX 1.g) pselect了。 如果您使用信号处理程序或用户定义的信号,我认为这是值得调查的。 它也解决了一些其他方法中出现的微妙的竞争条件。
我知道你提到了“忙碌的循环”,但是我认为一个“阻塞循环”就是你所追求的。