C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

2008/10/07 11:43|

 

srand関数は、乱数の種を設定するための関数です。この関数で、適切に種を設定しないと、rand関数は常に同じ数列を返すことになります。

ところで、乱数の種としてsrand関数に渡す値には、time関数の返却値を使うことが多いようですが、今回の実装では、time関数はデフォルトでは (time_t)-1 を返すことになりそうですので、あらかじめお断りしておきます。

それでは実装です(2006/06/08 若干間違いがあったので修正しました)。

#include <kernel.h>

static unsigned long next = 1UL;

void srand(unsigned int seed)
{
#ifdef __H8300__
  int loc = vsns_ini() || sns_loc();
  if (!loc)
    loc_cpu();
#endif
  next = seed;
#ifdef __H8300__
  if (!loc)
    unl_cpu();
#endif
}

H8/300の場合、unsigned long型のオブジェクトへの代入はアトミックオペレーションにならないため、loc_cpuで排他制御を行っています。もっとも、現状のTOPPERS/JSPカーネルは、H8/300に対応していないので、このような措置は不要かもしれませんが、とりあえずこうしておきます。

2006/06/05 22:12|一般ユーティリティTB:0CM:0

コメント
コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/67-5e713988

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.