[2] ストレージミューテックスは、 Webブラウザーが Cookie の書き込み等の競合状態の回避のために使うミューテックスでした。
[42] 仕様上の概念としては存在していましたが、技術的問題から現実には実装されていませんでした。 競合状態を正しく処理する実装方法を用意するために仕様上は残されていましたが、 今後実装される見込みもないため、2015年末に削除されました。
[3] 利用者エージェントは、ストレージ・ミューテックスを1つ持って構いません。 ストレージ・ミューテックスは、ある時点で
... のいずれかの状態にあります。 >>1
[10] ストレージ・ミューテックスを得る場合は次のように処理しなければなりません >>11。
[15] ストレージミューテックスの取得は次の状況で行われます。
[20] ストレージ・ミューテックスは、 fetch 算法の中で Set-Cookie:
の処理のために所有され、処理が終わり次第解放されます。
[5] 利用者エージェントは次の場合にストレージミューテックスを解放しなければなりません。
[4] 利用者エージェントはストレージ・ミューテックスを実装しないことを選択しても構いません。 その場合、ストレージ・ミューテックスの取得や解放に関する要件は実装しなくて構いません。 >>1
[8] ストレージ・ミューテックスを使わないと、あるサイトが複数の窓から同時に Cookie や Web Storage にアクセスした時にデータが壊れる危険性があります。 しかしストレージ・ミューテックスを使うと、あるサイトが Cookie や Web Storage を使うと他のすべてのサイトがブロックされてしまうことから、 Webブラウザー全体のパフォーマンスに大きく影響します。 Webブラウザーの実装者はこの2つの「evil」のどちらかを選択せざるを得ません。 >>1
[36] Web Storage の仕様上、スクリプトの実行途中に localStorage
の値は (そのスクリプト自身が予測できない形で) 変化することはない、とされています。 >>33
しかし >>4 の通りストレージ・ミューテックスを実装しないことを利用者エージェントが選択しているなら、
これは保証されません。
[43] 現実にはすべての Webブラウザーがこの方法を選択しています >>41。 すなわちストレージミューテックスは仕様上にしか存在しません。 通常は実装されない仕様は削除されるものですが、 HTML Standard の編集者である Ian Hickson は、データが破壊される可能性がある実装しか認められないのは好ましくないとして、 ストレージミューテックスの仕様を残しています >>40。
[50] Remove the storage mutex due to lack of implementation · whatwg/html@1b918cf ( 版) <https://github.com/whatwg/html/commit/1b918cf72fcbba011f83b92ab5d1f483fb1cafa3>
[51] Remove navigator.yieldForStorageUpdates() due to lack of implementation · whatwg/html@c6fb03d ( 版) <https://github.com/whatwg/html/commit/c6fb03dc3d9396f3a3c7f62b1c5cba1ed73cd9c5>
[52] Fix #45: remove references to the storage mutex · whatwg/xhr@2529712 ( 版) <https://github.com/whatwg/xhr/commit/25297128a14c543c909a052b2933d2b0b72550d1>
[53] Fix #198: give precedence to custom Authorization headers · whatwg/fetch@9b18866 ( 版) <https://github.com/whatwg/fetch/commit/9b188662ab3d0319fe6e5fc10f034a9f10f7b069>
sessionStorage
の読み書きにはストレージミューテックスは関与しません。