TAS()

int TAS(slock_t *lock)
TASはtest and setの略で、s_lock()内でロックの取得を試みる関数。s_lock()ではロックが取得できるまで高速にループし、TASの実行を繰り返す。
lockの値は、以下の値を持つ。
 ・他のプロセスからロックされているとき:1
 ・ロックされていないとき:0
TAS()は、以下の処理を行う。
 ・lockが0のとき:lockを1に設定し関数は0を返す(ロック取得に成功)
 ・lockが1のとき:lockは1のままで関数は1を返す(ロック取得に失敗)
test and setの操作は、アトミック(これ以上分割できない最小単位の操作)に実行する必要があり、アーキテクチャごとに違うプログラムで実装されている。x86CPU用のTAS()ではxchgbという、2つの値をアトミックに交換する命令が使われている。TAS()ではlockとresという2つ変数の値をxchgbで交換し、resの値を返す。resには初期値として1が設定されており、以下のように動作する。
 ・lockが0のとき:xchgbによりlockが1になりresが0になる(ロック成功)
 ・lockが1のとき:xchgbによりlockもresも1になる(ロック失敗)