作者meowyih (meowyih)
看板PHP
標題[請益] sem_acquire() 是 cross session 的嗎?
時間Tue Aug 20 16:52:32 2013
我要用 PHP 做一個簡單的搶答功能,
像是某個猜謎遊戲十點鐘開放,
前三個答對的可以拿到獎品!
因為 PHP 每個 SESSION 都是獨立的,
我沒辦法寫一個 "真正的" global variable,
在不想用 MySQL 來做這麼簡單的事的情況下,
想到最簡單的方法是讓每個 SESSION 打開某個檔案,
檔案裏面一開始是 0,開過一次改寫成 1,如果打開後變 3 就拿不到獎品了。
因為要做到這點,
我需要一個 semaphore 確保一次只有一個 SESSION 能開這個檔案,
請問 sem_aquire() 是產生一個的 semaphore 給所有 SESSIONS 用的嗎?
(抱歉寫了一堆只有最後一句才是問題 Orz)
code 大概是這樣
$SEMKEY = 1;
$sem_id = sem_get( $SEMKEY, 1 ); /* maximum one user */
if ( sem_acquire( $sem_id )) {
/* 在這裏讀檔案看自己是第幾個答對的人 */
...
sem_release( $sem_id );
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.68.97.241
1F:推 rickysu:用semaphore時php得加上--enable-sysvshm 編譯選項, 08/20 17:44
2F:→ rickysu:有些環境應該預設應該不會有支援。使用flock或是sqlite 08/20 17:45
3F:→ rickysu:跨平台性應該會好一些。 08/20 17:46
4F:→ liaosankai:試試 firebase ? 08/21 13:02
5F:→ chrisQQ:memcached ? 08/22 15:21