62,025
社区成员
发帖
与我相关
我的任务
分享
static List<红包> list = .......;
集合,那么代码lock(list)
{
......
}
就可以保证同一时间(以 list 为锁信号)只有一个线程进入这个代码块,其它的被 lock 语句阻塞。例如需要从 list 取下一个红包的代码,因为逻辑上必须保证安全,就应该在这个代码块中。反过来说,代码应该尽快解锁,以便提高性能。
这时候不必纠结什么“队列”名词儿?你搞所谓的队列为的什么?说的标题党一点儿,不懂 lock 的人才过于纠结“队列”这个词儿,因为头脑中没有 lock 机制所以觉得队列就是 lock。
//初始化队列
Queue RedPool = new Queue(currentNUM);
//判断是否有缓存队列,如果存在缓存队列读取缓存队列
if (MyCache.GetCache("QUEUE") != null)
{
RedPool = (Queue)MyCache.GetCache("QUEUE");
}
lock (queue)
{
//如果用户不在队列中
if (!Queue.isInById(RedPool, Member.ID))
{
//入队操作
//如果红包池没有满
if (!RedPool.IsFull())
{
RedPool.In(Member);
//两小时红包失效
MyCache.SetCache("QUEUE", RedPool, 7200);
}
else
{
//来晚啦 红包被抢完了
return;
}
}
}
//分配红包金额操作
//出队操作
//更新数据库,清空缓存