sleeplock.c void initsleeplock(struct sleeplock *lk, char *name)

トップページ
jupiteroak.hatenablog.com


sleeplock.c
https://github.com/mit-pdos/xv6-public/blob/master/sleeplock.c#L13

void initsleeplock(struct sleeplock *lk, char *name)
{
  initlock(&lk->lk, "sleep lock");
  lk->name = name;
  lk->locked = 0;
  lk->pid = 0;
}

initsleeplock関数は、排他制御の対象となる共有資源に関連しているスリープロックを初期化します。

引数 struct sleeplock *lk
初期化の対象となるスリープロック(sleeplock構造体)を指定するアドレスです。


処理の内容

sleeplock構造体に関連しているロック(通常のロック)を初期化する

initlock(&lk->lk, "sleep lock");

initlock関数を呼び出して、 sleeplock構造体に関連しているロック(通常のロック)を初期化します。

スリープロックによる排他制御の対象となる共有資源の名前を指定する

lk->name = name;

スリープロックの状態を初期化する

lk->locked = 0;

スリープロックが保持されていない状態なので、0の値で初期化します。

スリープロックを保持しているプロセスへの参照を初期化する

lk->pid = 0;

スリープロックを取得しているプロセスはまだないので、pidメンバ(スリープロックを保持しているプロセスの番号)を0で初期化します。