使用alarm配合訊號實現sleep

2021-08-26 07:00:24 字數 589 閱讀 3496

author: selfimpr

blog:

mail: [email protected]

apue中描述solaris 9是使用alarm實現的sleep, 其語義如下:

如果在sleep之前有乙個未到期的alarm時鐘, 則中斷時鐘

下面是乙個簡化的實現, 語義為:

如果sleep時發現已經有乙個alarm時鐘, 中斷alarm時鐘, sleep指定時間, 然後, 繼續未完成的alarm時鐘(兩個時間不互相影響)

這個語義比較雞肋...忽忽...

#include #include static int ud_sleep(int); static void sig_alrm(int); static void ud_wait(int); void main(void) /** * 睡眠seconds秒 * 與訊號的互動規則: 如果之前有alarm時鐘, 則以將seconds時間插入到原來的alarm中方式處理 */ static int ud_sleep(int seconds) static void sig_alrm(int signo) static void ud_wait(int imax) } }

使用alarm和pause實現sleep的初級認識

又有一段時間沒寫了。今天看到一句話,sleep函式在底層是用alarm和pause實現的 就上網搜了一下,看了好一會兒才明白是怎麼回事。alarm函式其實就是個定時器,每個程序只能維護乙個這樣的定時器。這個函式是有返回值的,通常是0,如果在乙個alarm還沒結束時就呼叫了另乙個alarm,那麼第二個...

使用訊號實現超時

訊號是軟體中斷,能夠提供一種處理非同步事件的方法。這些訊號被定義在signal.h中,列表如下 define sighup 1 hangup posix define sigint 2 interrupt ansi define sigquit 3 quit posix define sigill ...

使用FIFO實現POSIX有名訊號量

使用fifo實現posix訊號量算是乙個 unix網路程式設計 卷二 中第十章的乙個高階內容,其實數中僅僅是大致的實現了posix訊號量中極為有限的一部分功能。書中重新寫了sem open函式 sem unlink函式 sem close函式 sem wait函式和sem post函式,為什麼說使用...