问题标签 [race-condition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4263 浏览

javascript - Ajax 并发

我有一个 Web 应用程序,其中有一个不断倒计时的计时器。同时,客户端经常与服务器检查以查看是否已将更多时间添加到计时器。代码看起来像这样:

当然,它比这要复杂一些,但是您可以看到固有的竞争条件。如果 update 和 tick 函数都试图同时修改time怎么办?

坦率地说,我对 JavaScript 的了解还不够多,无法理解如何处理这种并发问题:有没有一种简单的方法可以做到这一点,或者如果没有,有人可以指出我可以了解更多信息的资源吗?

谢谢你。

0 投票
5 回答
828 浏览

java - java: 竞争条件 - 有没有办法确保几行代码将一起执行?

我有一个注册页面,它接收令牌广告解析它们并在参数适用时登录用户。

从我检查令牌到我从数据库中删除令牌的时间之间,另一个用户可以使用相同的令牌登录。有没有办法确保特定范围的代码行将不受干扰地执行,所以我不会有竞争条件问题?

谢谢

更新

我有两台服务器。

  1. 阿帕奇雄猫 6
  2. red5 v0.9(免费的基于java的flash媒体流和通信服务器)

我正在为 Facebook 编写游戏应用程序。

游戏本身是用 adobe flash builder 2 编写的。

游戏本身将使用 red5 服务器提供服务。问题是 red5 没有收到请求和响应标头,因此无法检索要使用的会话信息以从 facebook 获取信息。

为了解决用户连接到 tomcat 服务器的问题,该页面检查 facebook 相关信息的会话并使用 tinyFBClient 连接到 facebook,并将信息存储在 mysql db(用户详细信息)中,以确保这同一用户是要连接到 red5 的用户。

一旦创建了令牌。tomcat 页面显示一个对象 HTML 元素以显示相关的 SWF 文件(游戏文件)。tomcat 页面将令牌传递给该 SWF 文件。加载 SWF 文件后,它会获取该令牌并使用它连接到 red5 并查找用户信息。

我希望描述可以帮助您了解我的需求。感谢大家的支持!

0 投票
1 回答
195 浏览

macos - Race condition when calling FSDeleteObject

I have implemented a "safe save" operation that goes something like this:

  1. Save some data to temporary file A
  2. Copy contents of A to final destination B
  3. Delete A

I have a race condition at step 3 where Mac OS X will occasionally come back with error -47 (fBsyErr) when trying to delete the file using FSDeleteObject. I am completely confident I am the only one modifying this file and suspect the OS is doing something (e.g., background caching tasks) at the time I try to delete the file, resulting in the error.

This is an intermittent issue: normally the FSDeleteObject call works just fine. In those cases where I get the error code back I'd like to safely delete the file "at a later point in time" when the OS is finished playing with it.

What would be the best course of action to take in trying to delete this troublesome temporary file?

0 投票
5 回答
1619 浏览

python - 在 Python 中声明文件权限时避免竞争条件

应用程序想要解析和“执行”一个文件,并且出于安全原因想要断言该文件是可执行的。

片刻思考,你意识到这个初始代码有一个竞争条件,使安全方案无效:

竞争条件存在于

因为在这两个系统调用之间,文件有可能被不同内容的不可执行文件覆盖。

我的第一个解决方案是更改关键调用的顺序(并跳过现在冗余的存在性检查):

这是否解决了比赛条件?我怎样才能正确解决它?

简要说明安全方案的基本原理(我想)

该文件将能够在其环境中执行任意命令,因此它可以与 shell 脚本相媲美。

带有定义应用程序的 .desktop 文件的免费桌面存在安全漏洞:该文件可以指定任何带有参数的可执行文件,并且可以选择自己的图标和名称。因此,随机下载的文件可以隐藏在任何名称或图标后面并执行任何操作。那很糟糕。

这通过要求 .desktop 文件设置可执行位来解决,否则它们将不会以名称/图标呈现,并且免费桌面会询问用户是否要在开始之前启动程序。

对比一下 Mac OS X 的非常好的设计:“这个程序已经从网上下载了,你确定要打开它吗?”。

因此,在这个寓言中,以及您必须对下载的脚本进行外壳处理这一事实chmod +x,我考虑了上述问题中的设计。

结束语

也许总而言之,也许我们应该保持简单:如果文件必须是可执行的,则使其可执行并让内核在用户调用时执行它。将任务委托给它所属的地方。

0 投票
3 回答
724 浏览

.net - 方法内联优化会导致竞争条件吗?

正如在这个问题中看到的那样: 使用扩展方法引发 C# 事件 - 是不是很糟糕?

我正在考虑使用这种扩展方法来安全地引发事件:

但是 Mike Rosenblum 在 Jon Skeet 的回答中提出了这种担忧:

你们需要将 [MethodImpl(MethodImplOptions.NoInlining)] 属性添加到这些扩展方法中,否则 JITter 可能会优化您将委托复制到临时变量的尝试,从而允许出现空引用异常。

我在 Release 模式下进行了一些测试,以查看当扩展方法未使用 NoInlining 标记时是否可以获得竞争条件:

我在发布模式下运行了一段时间的测试,但从未出现过 NullReferenceException。

那么,Mike Rosenblum 在他的评论和方法内联不能导致竞争条件中是错误的吗?

事实上,我想真正的问题是,SaifeRaise 是否会被内联为:

或者

0 投票
2 回答
18993 浏览

mysql - 增加字段时如何确保 MySQL 数据库中没有竞争条件?

当两个连接想要更新同一条记录时,如何防止 MySQL 数据库中的竞争条件?

例如,连接 1 想要增加“尝试”计数器。第二个连接也想做同样的事情。两个连接SELECT的“尝试”计数都增加了值,并且两个UPDATE“尝试”的值都增加了。突然间,“tries”只是“tries+1”而不是“tries+2”,因为两个连接都获得了相同的“tries”,并将其加一。

如何解决这个问题呢?

0 投票
6 回答
506 浏览

java - Unpredictable Program Behaviour in Java

I'm pulling my hair out with this and I thought I'd see if the greater Java experience of others might be able to shed some light on the problem. There is a large amount of program code I have written, which is itself within a larger project so I can't simply post it. However, I will outline the problem...

The issue: My code does not return predicatble results from a simulation. Each time the simulation is run, various statistics are recorded. Despite the fact that the code is identical (!), the results produced differ between executions.

Things I am pretty sure are not a problem (although if you think there's a "gotcha" please shout out):

  • A random number generator is used but it is seeded with the same value each time.
  • The program is single threaded so race conditions should not be an issue.
  • Behaviour occurs in both debug mode, standalone jar and normal execution from the IDE (I'm using eclipse).
  • Static members are used between objects in lists. The for-each construct is used, but this should execute in the same order each time.
  • In the case of sorting the lists just mentioned, Collections.sort() is utilised and so should be stable (again, lists should be ordered in the same order)

Can anyone think of something I might be overlooking here? This seems unfathomable at the moment! Thanks!

0 投票
2 回答
970 浏览

cuda - 在 CUDA 上通过多个线程使用设备变量

我在玩cuda。

目前我有一个问题。我正在为特定响应测试一个大型数组,当我得到响应时,我必须将数据复制到另一个数组中。

例如,我的 5 个元素的测试数组如下所示:
[ ][ ][v1][ ][ ][v2]

结果必须如下所示:
[v1][v2]

问题是如何计算第二个数组的地址来存储结果?并行检查第一个数组的所有元素。

我正在考虑声明一个设备变量 int addr = 0。每次找到响应时,我都会增加addr。但我不确定,因为这意味着addr可能同时被多个线程访问。这会导致问题吗?或者线程会等到另一个线程完成使用该变量吗?

0 投票
7 回答
376 浏览

c# - 线程启动期间的竞争条件?

我正在运行以下代码来启动我的线程,但它们没有按预期启动。出于某种原因,一些线程以相同的对象开始(有些甚至不开始)。如果我尝试调试,它们开始就好了(我单击 F10 以逐步执行代码增加了额外的延迟)。

这些是我的表单应用程序中的功能:

任何人都可以帮助我吗?

0 投票
2 回答
426 浏览

php - MySql 查询滞后时间/死锁?

当有多个 PHP 脚本并行运行时,每个脚本都重复对同一张表中的同一条记录进行 UPDATE 查询,在每次查询更新表之前是否可能存在“滞后时间”?

我基本上有 5-6 个并行运行的 PHP 脚本实例,它们是通过 cron 启动的。每个脚本获取items表中的所有记录,然后遍历它们并处理它们。

但是,为了避免多次处理同一个项目,我将最后一个正在处理的项目的 id 存储在一个单独的表中。所以这就是我的代码的工作方式:

但是,尽管采取了所有预防措施,但大多数物品都被处理了不止一次。这让我认为 PHP 脚本运行的更新查询与数据库实际更新记录之间存在一些滞后时间。

这是真的吗?如果是这样,我应该使用什么其他机制来确保 PHP 脚本始终只获得最新的currentItemId,即使有多个脚本并行运行?会使用文本文件而不是 db 帮助吗?