[PHP-users 19482]Re: 重複投稿/submitを防ぐトランザクショントークンという考え方
Kawazoe Tomonori
tsk @ ibakou.com
2003年 12月 21日 (日) 23:09:36 JST
川添です。
On Sat, 20 Dec 2003 18:57:16 +0900
Mori Reo <list-program @ rucifer.ddo.jp> wrote:
> Kawazoe Tomonori <tsk @ ibakou.com>さん:
> > ソースのこの部分がatomicでないと、多重に処理される可能性はまだあります。
>
> これは気がつきませんでした。
> 具体的に動作はしたものの、検証する方法が思いつきません。
> このスクリプトを普通に実行しただけでは、ロックされている場合の
> 処理が全く実行されません。ロック処理を検証する良いアイデアは
> ありますか?
atomicでないことの検証は難しいです。
「気をつける」くらいしか思いつきません。
ただ、もしmulti-threadなコーディングを行うなら、
そういう意識を常に持たないと、ひどい目にあえます。
で、万全を帰すには、ロックファイルを作るなどの方法が
(OSがサポートするなら)確実でしょう。
実はPHPではそういうコードを書いたことがないのですが ^^;
・ファイルを開く(なければ作成)
・flock(handler, LOCK_EX)
・排他を要する処理
・flock(handler, LOCK_UN)
・(ファイルを閉じる)
かな。
flockでLOCK_EXすると、ロックを獲得できるまで待ちに入りますので、
その後の排他性については保証できます。
UNIX系ではflock以外にも「定石」がまだ2つありますし、他にも色々
ありうると思います。
---
川添 朋律 / Kawazoe Tomonori <tsk @ ibakou.com>
PHP-users メーリングリストの案内