问题标签 [synchronisation]

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 投票
1 回答
1182 浏览

c - C中的三元运算符和序列点

我有如下所示形式的表达式:-

现在三元运算符是 C 中的序列点,但我相信序列点在测试部分结束。

这种理解是否正确,因此这种说法会导致未定义的行为吗?

0 投票
3 回答
134 浏览

java - 在单线程中多次调用静态方法

请看这个类,静态方法调用和输出。

我得到了运行这个程序的不同(来自 System.out.print 的订单)输出。例子:

你们谁能解释我(详细)为什么?提前致谢。sznury

0 投票
1 回答
78 浏览

java - 具有更改日志和数据库同步的实体

我正在寻找一个针对 java、jpa2、spring、hibernate 数据库应用程序的解决方案,它允许我基本上为实体做类似 SCM 的事情。我有一个托管在多个应用程序服务器上的数据库驱动的 Java 企业应用程序。这些应用程序服务器托管无状态 Web 应用程序(REST API 等),这些应用程序都基于相同的 java 代码并使用相同的数据库。此应用程序提供的一项服务是文件管理。用户(通过各种 api 客户端和前端应用程序)能够创建(上传)、删除、重命名、移动文件和文件夹。

现在一段时间以来,文件版本的要求不断涌现,我想最终解决这个问题。这是我在java实体方面提出的:

我打算公开File而不是FileVersion直接通过授权。为此,我需要某种简单的方法来检索“头”版本(这将是版本集合中的最后一个条目)。基本上每个写操作都File需要FileVersion根据当时的“头”创建一个新的。鉴于多个应用程序服务器访问同一个数据库,我不确定是否有某种方法可以锁定相应的File实体(行级锁定?),以便我确定我的新文件版本基于正确的“头” ”。

我的另一个想法是让客户提供他的更改所基于的某种版本标识符。FileVersion如果在持久化此版本标识符时与给定应用程序的最新版本不匹配,File则应用程序将不得不拒绝更改...

我是朝着正确的方向前进还是我的方法被认为是失败的?

0 投票
5 回答
366 浏览

java - java锁定对象实例......这安全吗?

我的问题是关于锁定 Java 中的对象实例。我有以下方法可以被多个线程同时调用。我选择锁定一个对象实例,因为我希望允许并发处理,只要一个实例一次只能由一个线程访问。

我的简化代码是这样的,我基本上锁定了一个局部变量。这真的能满足我的需要吗?我一直在阅读建议不要锁定可能会改变的对象,我突然不确定这是否是我正在做的事情!

谢谢!

编辑:

哦,天哪……我只是意识到我试图简化发布代码的尝试可能会有点误导。

我将之前调用“getInstance”的方法重命名为其他名称(“getFromMap”),以证明该方法调用是自定义代码,它返回对哈希图中对象的引用。

之前的答案还会成立吗?为混乱道歉!

0 投票
2 回答
406 浏览

multithreading - 使用两个 EMF 适配器将 GEF 编辑器与 EMF 模型同步

我无法将 GEF 编辑器与基于 EMF 的模型同步。我认为这是因为模型内部的 EMF 适配器,或者更确切地说是它调用的方法,在调用编辑器的适配器notifyChanged()并更新模型子节点之前没有完成。这导致编辑器视图与模型本身不同步,或者更确切地说,模型的更改没有在视图中显示,而它们应该显示在视图中。

考虑这个设置。一个Command" CreateNodeCommand" 向底层模型添加一个节点:

GraphEditPart一个内部类扩展org.eclipse.emf.common.notify.Adapter。它的notifyChanged()方法确实被通知了,测试类似于下面(不完整的代码):

问题是,(第三方)模型本身也实现了一个Adapter,它又在新的模型元素上运行许多方法,例如添加一个 ID 等。

在我看来,新元素的图形在创建后并没有直接出现在编辑器中这一事实 - 但只有在下一个编辑步骤之后,然后没有出现的图形 - 表明模型适配器是仍在忙于设置新元素,而编辑器适配器refreshChildren()已经在调用它。

这似乎需要同步,但我不确定这是否可以通过用于多线程的内置 Java 功能或调用基于 EMF 的方法来实现。

请分享您在 EMF 中同步的知识。

提前谢谢了!

编辑

根据要求,这是该getModelChildren()方法的源代码:

0 投票
2 回答
99 浏览

c# - 线程循环并等待来自缓冲区的消息 - 最佳解决方案

我有一个特定的问题,我想要一个单独的工作线程,如果缓冲区不为空,它在某些时期控制。如果不是,线程从缓冲区(ConcurrentQueue)发送数据......有什么好的解决方案,这对CPU来说并不昂贵?

这是我的方法,它有效但可能不是很好(真的我不太了解线程同步)。

0 投票
1 回答
112 浏览

graphics - Java Graphics 同步问题绘制动态数据

我有一个程序,我想在其中绘制不断更新的数据(顺便说一下,它是 microhpone-line-data)。数据是一个 8000 长度的双精度数组,我并不真正关心在绘制方法之间被覆盖的“丢失”数据。

在我幼稚的实现中,很明显存在同步问题,即在绘画例程正在进行时更新音频数据。

我也知道我在 Java 和它的并发包上有点过时了,但我的第一反应是在共享数据代码周围放置同步块。不出所料,这有时会阻塞图形线程,所以我认为可能有更好的方法来做到这一点。

本质上,我只是没有太多同步方面的经验,并且在某处搞砸了一些事情。我想知道对这些问题有更好理解的人是否能够提出一个更优雅的解决方案,不会阻塞图形线程?

我天真的代码:

0 投票
1 回答
394 浏览

pthreads - 需要关于 pthread 同步的建议/建议(结合使用条件变量和屏障)

我有以下情况:

我把一个任务分成几个阶段,每个阶段有几个线程做实际的工作,后期的线程需要等待当前阶段的所有线程完成。

例如:

线程 1、2、3 正在执行第一步中的工作

线程 4、5、6 正在执行第二步中的工作

线程 7、8、9 正在执行第三步……

每个步骤中的线程都是独立的,但它们需要等待上一步中的线程完成。

这是我想要实现的方法:

  1. 在当前步骤的每个线程中,等待表示当前步骤是否可以启动的条件
  2. 一旦可以开始当前步骤,所有线程都开始工作,并在屏障上等待此步骤中的所有线程完成
  3. 此步骤中的所有线程完成后,在下一步线程正在等待的条件变量上广播

这有意义吗?这里有什么明显的错误吗?

我被多线程程序的高级语言结构宠坏了,使用 pthread API 对我来说很痛苦。在这里,我需要一些关于此用例中最佳实践的建议?非常感谢

0 投票
1 回答
244 浏览

multithreading - Delphi2006 - 是否有带有 TMultiReadExclusiveWriteSynchronizer 的 TList?

我有一个多线程的外部应用程序,这个应用程序正在使用我的自定义 dll 从那个线程做一些事情。
在这个 dll 中,我有 2 个函数可以读取和写入一些数据到TList.
我需要这些线程可以自由读取该列表,但一次只能写入一个,其余的必须等待他们的时间写入。

我的问题:
- BDS 2006 中是否有一个TList具有 TMREWSync 功能的组件,或者
- 也许您知道我可以在我的应用程序中使用的任何免费的第三方组件,或者
- 也许您有一些TList可以执行上述操作的自定义代码。

编辑:我需要类似TThreadList.LockList但仅用于写入该列表的东西。

谢谢你的帮助。

0 投票
1 回答
541 浏览

stream - Directsound流同步

我对 2 个 Directsound 流的同步有疑问。

为了录制和播放声音,我目前使用 Portaudio 打开 2 个 Directsound 流。每次输入缓冲区被填满并且输出缓冲区需要数据时,都会调用 2 个回调函数。

现在这是我的问题...

输入流以 48kHz 采样率运行(@1024 个样本)。输出流以 192kHz 采样率运行(@4096 个样本)。每次输入缓冲区被填满并调用回调时,我都会做一些 DSP,然后将结果转换为 192kHz。输出流获取结果并输出数据。现在这两个流完全不同步了。

我查看了整个 Portaudio API,但找不到将 2 个流锁定在一起的同步选项。

有什么方法可以锁定 2 个 Directsound 流吗?我真的需要 48kHz 输入和 192kHz 输出。

溴,

文森特·布鲁因克。