linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

時間管理 - gtod_read_begin()

概要

引数の値が更新可能な状態になるまで待ち、更新可能な状態になったら、現在値を返す

詳細

vsyscall_gtod_data型のポインタsを引数として受け取る

ACCESS_ONCE()s->seqを読込み、読み込んだ値が奇数値なら別なプロセスでこの値を参照しているためcpu_relax()を実行し、CPUを休止してから同じ処理を繰り返す

読み込んだ値が偶数値ならループを抜けてsmp_rmb()を実行し、読み込んだ値を返す