作者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