0
S1: Lookup for some input data
S2:  IF not found SET IT
S3:  INSERT DATA
S4:  ELSE RETURN

最初没有存储数据。如果 2 个线程同时查找相同的输入数据,则查找在两种情况下都返回 FALSE。然后都经历了长 SET 阶段。最后,一个非同步的 Insert 方法中的单例服务 Thread Inserts 条目。

这样,虽然查找的目的是永远不要让相同的数据重复两次,但由于 2 个线程处理相同的数据,它的目的并没有解决。如何在多线程程序中处理这种情况?

4

2 回答 2

1

如果您正在使用数据库,那么您正在寻找的关键字是upsert

如果是普通编码,你可能需要atomics或者可能是同步

如果你能澄清你的问题,也许我们可以提供进一步的帮助。

于 2013-02-25T23:12:11.500 回答
0

应用双重检查锁定:

S1: Lookup for some input data
S2:  IF not found {
       synchronized(getClass()) {
S2-1:    Lookup for some input data
S2-2:    IF not found
S2-3:    INSERT DATA
       }
S3:  RETURN result of S1, S2-1, or S2-3
于 2013-02-26T01:05:33.140 回答