小编Sto*_*ika的帖子

JDOK8中的ConcurrentHashmap代码说明

我一直在尝试理解JDK8中的ConcurrentHashMap函数,与JDK7中的它是如何形成对比的(除了源代码之外,还可以找到很好的解释,例如Richard http:// www .burnison.ca/articles/the-concurrent-of-concurrenthashmap).它看起来在JDK8中已经发生了相当大的变化 - 例如,本身没有更多的"段",但不知怎的,我觉得这些变化是为了让代码变得更简单?

  1. 我很难理解方法ConcurrentHashMap.putVal(...),特别是以下部分 - 这个直接锁定在'segment'列表的头部,无论如何要插入else {}?:

        else if ((fh = f.hash) == MOVED)
            tab = helpTransfer(tab, f);
        else {//...}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 对ConcurrentHashMap.casTabAt(...)的代码也不太确定.

  3. 另外,关于JDK8中ConcurrentHashMap.get(Object key)的源代码,它是否完全没有锁定(我没有看到任何内容,如果是这样的话,没有锁定它是如何工作的,因为我看不到循环'再试一次?或者还有一些我没有观察到的乐观锁定?

感谢是否有人可以提供一些提示.

concurrency concurrenthashmap java-8

6
推荐指数
1
解决办法
741
查看次数

CUDA线程寻址((threadIdx.x,threadIdx.y,threadIdx.z)和块寻址(blockidx.x,blockidx.y)

我只需要澄清一些非常基本的东西 - 大多数计算实例都使用类似的东西:

ID = blockIdx.x*blockDim.x + threadIdx.x;

// ...然后在数组[ID]上进行计算

我的问题是,如果我想使用的块(1024),那么我真的需要"建立"我的"线程ID"考虑所有的(线程的最大数量threadIdx.x,threadIdx.y,threadIdx.z)?

如果是这样,建议将其散列为单个值的方法是什么?

如果不是这样,为什么有人在图像处理相关的操作中以类似的方式使用它,例如在这篇文章中:

/sf/ask/805238451/

怎么样blockidx.x和blockidx.y他们,是在同一鞋的threaIdx在这方面?

cuda

4
推荐指数
1
解决办法
2万
查看次数

最小化 JDK8 ConcurrentHashMap 检查和设置操作的锁定范围

1.

我有多个线程更新 ConcurrentHashMap。每个线程根据键将整数列表附加到映射条目的值。任何线程都没有删除操作。

这里的要点是我想尽可能地最小化锁定和同步的范围。

我看到computeIf...()方法的文档说“在计算过程中,其他线程在这个地图上尝试的一些更新操作可能会被阻止”,这并不令人鼓舞。另一方面,当我查看它的源代码时,我没有观察到它在整个地图上锁定/同步的位置。

因此,我想知道使用 computeIf...() 和以下自产的“方法 2”的理论性能的比较。

2.

另外,我觉得我在这里描述的问题可能是您可以在 ConcurrentHashMap 上执行的最简化的 check-n-set(或通常是“复合”)操作之一。

然而,我不是很自信,也找不到很多关于如何在 ConcurrentHashMap 上进行这种简单的复合操作而不锁定/同步整个地图的指南。

因此,将不胜感激任何对此的一般性良好实践建议。

public void myConcurrentHashMapTest1() {

    ConcurrentHashMap<String, List<Integer>> myMap = new ConcurrentHashMap<String, List<Integer>>();

    // MAP KEY: a Word found by a thread on a page of a book 
    String myKey = "word1";

    // -- Method 1: 
    // Step 1.1 first, try to use computeIfPresent(). doc says it may lock the
    //      entire …
Run Code Online (Sandbox Code Playgroud)

java multithreading concurrenthashmap atomicity java-8

3
推荐指数
1
解决办法
1000
查看次数