sleep関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
クロ

sleep関数について

#1

投稿記事 by クロ » 13年前

プログラミング初心者なので、基本的な知識レベルの質問かもしれませんが申し訳ありません。

sleep関数を使用したプログラムをサーバ上で動かす場合、sleepする時間はどこから取得しているのでしょうか?
サーバの時刻から取得しているのでしょうか?
それとも、内部的に経過時刻のようなものを持っているのでしょうか?

ネット等で調べようとしたのですが、関数の使い方の説明はあっても、仕組みがよくわからず、イメージがつかめなかったので質問させていただきました。
ご回答いただけますと幸いです。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: sleep関数について

#2

投稿記事 by beatle » 13年前

sleep関数の内部実装を覗いたわけではないのですが、OSを少し作ったことがある経験からもし僕だったらマザーボードに組み込まれているタイマー(プログラマブル・インターバル・タイマー)からの割り込み信号を積算して秒数を数えるような実装にすると思います。
クロさんのいう「サーバの時刻」がLinuxでいう「ハードウェアクロック」と「ソフトウェアクロック」のどちらを指しているか分かりませんが、タイマーによる実装はすなわちソフトウェアクロックによる実装ということです。

そもそも、スレッドという仕組みがあるマシン上でsleep関数を呼び出しますと、sleep関数を呼び出したスレッドは停止しますから、sleep関数が(whileループでカウンタをインクリメントするなどの手法で)自分自身で経過時間を測ることはできません。
ですから「内部的に経過時刻のようなものを持っている」というのは無理があるかなと思います(僕の解釈がクロさんの解釈と違っていたらすみません)。

クロ

Re: sleep関数について

#3

投稿記事 by クロ » 13年前

ご回答ありがとうございます。
確かにプログラム自身が時間を持っているというのは無理がありそうですね・・・
勉強になりました!

閉鎖

“C言語何でも質問掲示板” へ戻る