spinlock.c void initlock(struct spinlock *lk, char *name)

トップページ
jupiteroak.hatenablog.com


spinlock.c
https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L12

void initlock(struct spinlock *lk, char *name)
{
  lk->name = name;
  lk->locked = 0;
  lk->cpu = 0;
}

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

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

引数 char *name
ロックによる排他制御の対象となる共有資源の名前です。


処理の内容

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

lk->name = name;

ロックの状態を初期化する

lk->locked = 0;

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

ロックを保持しているスレッドへの参照を初期化する

lk->cpu = 0;

ロックを保持しているプロセッサ(スレッド)はまだないので、cpuメンバ(ロックを保持しているプロセッサ(スレッド)を表現したcpu構造体へのポインタ)を0で初期化します。