[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 メーリングリストの案内