问题标签 [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 投票
4 回答
1291 浏览

javascript - Javascript中的繁忙指标竞争条件

我有以下(javascript/jquery)代码在加载图像时显示繁忙指示器(延迟后):

有时,指标会出现并保持不变。如果浏览器的 javascript 引擎是单线程的,这怎么可能?(顺便说一下,这是在 Firefox 3 上。)

注意:这似乎发生在正在加载的图像已经缓存时。

另一个注意事项:如果我登录到我的 firebug 控制台,imgUpdate 中的所有行都会执行,但 onload 处理程序中的日志消息永远不会在后续调用 imgUpdate 时打印。

0 投票
2 回答
22107 浏览

sql - SQL Server 进程队列竞争条件

我有一个订单队列,多个订单处理器通过存储过程访问该队列。每个处理器传入一个唯一 ID,用于锁定接下来的 20 个订单以供自己使用。然后存储过程将这些记录返回给订单处理器以进行操作。

在某些情况下,多个处理器能够检索相同的“OrderTable”记录,此时它们会尝试同时对其进行操作。这最终会导致在流程后期抛出错误。

我的下一步行动是让每个处理器获取所有可用订单并循环处理处理器,但我希望简单地使这部分代码线程安全并允许处理器随时获取记录。

如此明确-知道为什么我会遇到这种竞争状况以及如何解决问题。

0 投票
3 回答
10669 浏览

c - 如何获取和同步所有 X11 窗口的完整列表?

我想监控X11下所有打开的窗口。目前,我这样做如下:

  1. 最初通过从根窗口递归调用 XQueryTree 来遍历整个树
  2. 监听整个桌面的子结构变化:XSelectInput( display, root_window, SubstructureNotifyMask | PropertyChangeMask )
  3. 处理所有 MapNotify、UnmapNotify 和 DestroyNotify 事件,在进程中更新我自己的窗口列表

我主要担心第1点。在递归过程中,XQueryTree会被多次调用。有什么办法可以确保树在此期间不会改变?换句话说,在某个时间点获取整棵树的“快照”?

另外,我注意到在某些 X11 系统下,并非所有事件都正确到达。例如,当在桌面上打开一个新窗口时,该窗口的 MapNotify 可能永远不会到达我的监控应用程序。怎么会这样?是否有可能在到达之前被丢弃?

更新:

我编写了一个小程序来监视根窗口上的 X 事件(见下文)。现在,当我运行这个程序并启动和退出 xcalc 时,我得到以下输出:

而已。我从来没有收到关于真实窗口(0x4a0005b)被破坏的通知。甚至没有被映射!谁能告诉我为什么不呢?SubStructureNotifyMask 是否只导致发送直接子窗口的事件而不是整个子树?

顺便说一句,这显然不会在 Compiz 运行时发生。然后不进行重新父项:

监控程序来源:

0 投票
6 回答
21145 浏览

python - django 中的比赛条件

这是一个具有潜在竞争条件的 django 视图的简单示例:

竞争条件应该相当明显:用户可以发出两次此请求,并且应用程序可能user = request.user同时执行,导致其中一个请求覆盖另一个请求。

假设函数calculate_points比较复杂,根据各种奇葩的东西进行计算,不能放在一个单一的update,也很难放在存储过程中。

所以这是我的问题:django 可以使用什么样的锁定机制来处理类似的情况?

0 投票
3 回答
650 浏览

javascript - Javascript 和 DOM 事件交互和可能的竞争条件

场景:预加载图像

  1. 执行 ajax 查询
  2. 显示加载屏幕
  3. 从 ajax 查询中检索结果
  4. 将图像插入 dom
  5. 等待图像完成加载
  6. 隐藏加载屏幕

我正在考虑执行以下操作:

我不太确定浏览器 DOM 和 javascript 之间的交互。DOM 在开始加载图像之前是否等待 javascript 完成执行?我担心可能的比赛条件。

0 投票
11 回答
4846 浏览

multithreading - 一条汇编指令是否总是以原子方式执行?

今天我遇到了这个问题:

你有一个代码

如果worker从两个不同的线程调用counter,它们都完成后会有什么值?

我知道实际上它可以是任何东西。但我的内心告诉我,这counter++很可能会被翻译成单个汇编指令,如果两个线程都在同一个内核上执行,则为counter20。

但是,如果这些线程在不同的内核或处理器上运行,它们的微码中是否存在竞争条件?一条汇编指令是否总是可以被视为原子操作?

0 投票
4 回答
1570 浏览

javascript - 由于多个 AJAX 请求的竞争条件

我的问题如下。我编写了一个类 AJAXEngine,它在构造函数中创建了一个新的 XMLHttpRequest 对象。该类包含一个名为 responseAnalyser 的方法,当 XMLHttpRequest 对象的“onreadystatechange”发生变化时调用该方法。所以现在我创建了 4 个 AJAXEngine => 4 XMLHttpRequest 对象的实例。

现在我有另一个类 DataRequester,它有一个数组属性 dataReq,它保存 AJAXEngine 的实例。整个程序中只有一个DataReqeuster实例!DataRequester 有一个名为 callWhenFinished 的函数。该函数由 AJAXEngine 的函数 responseAnalyser 调用,并递减 DataRequester 实例的一个变量。

但是,我认为会发生比赛条件。我怎样才能在 JavaScript 中预防它们?

0 投票
3 回答
148 浏览

.net - 当另一个线程在其上执行方法时使对象引用无效(.NET)

(我对 .NET CLR 感兴趣)

当一个线程更改变量引用的对象而另一个线程正在对原始对象执行方法时,究竟会发生什么?

例如,假设该类型Foo有一个类型为 'Bar' 的变量Bar,并且Bar没有类级别的状态(至少现在,我想让这个场景保持简单):

与此同时,在这完成执行之前......

在线程 1 上(曾经?)执行的方法会发生什么?它需要完成的所有事情都已经在堆栈上了吗?

如果线程 2 这样做会改变事情吗?

0 投票
3 回答
218 浏览

c++ - 从 SVN 更新 Boost Wave

我在使用的一个 boost 组件中遇到了一些错误。稍微分析了一下问题,我发现不是我一个人,而且作者已经发布了一个修复,可以在 boost SVN 主干中找到。

如果我只想更新这个组件并重用已经构建的库,那么最好的方法是什么?该组件不仅仅是标题。

  • 编译器:带 SP1、TR1 的 MSVC 9
  • 操作系统:Vista
  • Boost:来自 BoostPro 计算的 1.39
  • 错误组件:Boost Wave
  • 错误:竞争条件。该错误已于今年 5 月修复,但据我所知,他们尚未将其包含在任何版本中。

到目前为止我做了什么:

  • wave子目录的svn结帐
  • 替换本地子目录
  • 现在我正在寻找一种方法来指定我只想构建wave

我有点厌倦了重建整个 boost 库。我不知道主干现在是否可以生产。

0 投票
7 回答
299 浏览

sql - 有人同时在我的网站上创建了两个相同的帐户。这怎么可能?

我不敢相信 - 有人实际上使用同一个电子邮件在我的社交网站上创建了两个帐户,尽管同时存在服务器端和客户端验证检查来防止这种事情发生。但是得到这两个帐户的创建时间是完全相同的时间。

出于某种原因,我怀疑这是否可以使用表单或任何界面 - 但是我很想知道这是怎么发生的?有人在这里有什么想法吗?