我在 Web 应用程序中面临潜在的竞争条件:
# get the submissions so far from the cache
submissions = cache.get('user_data')
# add the data from this user to the local dict
submissions[user_id] = submission
# update the cached dict on server
submissions = cache.update('user_data', submissions)
if len(submissions) == some_number:
...
逻辑很简单,我们首先获取存储在 web 服务器缓存中的共享字典,将提交(由每个请求传递到服务器)添加到其本地副本,然后我们通过将其替换为更新的本地副本来更新缓存副本复制。最后,如果我们收到一定数量的数据,我们会做其他事情。请注意
submissions = cache.update('user_data', submissions)
将从缓存中返回最新的字典副本,即新更新的字典。
因为服务器可能同时服务多个请求(每个请求在自己的线程中),并且所有这些线程都访问缓存中的共享字典,如上所述,从而产生潜在的竞争条件。
我想知道,在 Web 编程的上下文中,我应该如何有效地处理线程以防止在这种特殊情况下出现竞争条件,而不会牺牲太多的性能。一些代码示例将不胜感激。