【问题标题】:MultyThreading debug (java or VS) [closed]多线程调试(java 或 VS)[关闭]
【发布时间】:2014-02-13 16:08:52
【问题描述】:

我有一个可以完美运行的应用程序))我已经用两种变体编写了它 - 使用并行方法和简单的分步操作,甚至得到了相同的结果......但是!在极少数情况下,我的并行代码会产生重​​复数据。它们中的一小部分——对于 400-500 Mb 的有效数据,我只得到 7 到 20 个字节的垃圾,甚至在每个程序运行时都没有。但我不喜欢它!我使用了同步数据存储,但它是第三方代码*。所以我想这个问题是存在的。但是我怎么能调试这种奇特的情况呢?

*我有这个第三方存储的代码

【问题讨论】:

  • 你知道是C#还是Java,还是两者兼而有之?
  • 没关系)我可以将我的核心代码移植到 c# 并与 VS 调试工具一起使用,或者将其留在 java IDE 中(遗憾的是,在我看来,调试工具更差)跨度>
  • 调试器并不适合检测线程之间的竞争条件。没有什么比保持代码简单和准确理解代码在做什么更重要了。
  • 你说得非常对 =) 我试图自我批评并记住简单是关键))事实上我只能移植我的核心(。我只有第 3 方存储代码对于java版本(并且只有dll用于win((

标签: c# java multithreading debugging synchronization


【解决方案1】:

您可能没有考虑到某种竞争条件。调试竞争条件可能会很棘手,因为您最终会通过添加任何代码来更改时间。最好的办法是回过头来仔细考虑一下数据被破坏的地方。

我会添加一件事,虽然这让我跟上了同步。我不知道你的第三方的东西,但我使用对象进行同步(一个 android 的东西?)。我错误地使用了一个布尔对象,它只指向两个对象之一(真或假)。因此,虽然我的对象被命名为不同的东西,但我实际上是在它们指向的相同对象上同步!

不确定这是否有帮助,但祝你好运!多线程可能很棘手!我们可能需要主要的代码部分来真正研究这个问题。

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2012-04-25
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多