>>444
どうもありがとうございます。
おかげ様で大変よくわかりました。感謝感謝です。

今度は
>>448の
volatile宣言の必要がないというのがわかりません。

(444さんと同じ考えですが) volatileが無いと、
lock とunlock が通常の関数呼び出しとして実装されている
なら大丈夫としても、
仮にこれらがインライン展開される関数やマクロだった場合に、
・lockの直後のif文で G がメモリから再ロードされるかどうか
・更新後の Gの値がunlockの前でメモリに書き込まれるかどうか
が保証されないのでは? と思えます。