小编Ale*_*Suo的帖子

是x86 CMPXCHG原子,如果是这样,为什么需要LOCK?

Intel的文档

该指令可以与LOCK前缀一起使用,以允许指令以原子方式执行.

我的问题是

  1. 可以CMPXCHG用内存地址操作吗?从文档看来似乎没有,但任何人都可以确认只能在寄存器中使用实际的VALUE,而不是内存地址吗?

  2. 如果CMPXCHG不是原子级和高级语言级CAS必须通过LOCK CMPXCHG(带LOCK前缀)来实现,那么引入这样一条指令的目的是什么?

concurrency x86 compare-and-swap

10
推荐指数
2
解决办法
8761
查看次数

Java lambda匿名对象是否被重用?

从当前的JDK 1.8实现开始,它构建一个匿名对象来保存lambda函数并在这样的对象上调用函数.这个匿名对象是在每次调用中重用,还是每次都重新创建一个对象?

java lambda anonymous-class

9
推荐指数
1
解决办法
597
查看次数

C ++复杂静态初始化逻辑的最佳实践

我有很长的Java语言,对C ++还是比较陌生。因此,在Java中,如果在类级别有一些复杂的静态对象(在Java中,一切都在类级别),我们可以简单地使用静态块来对其进行初始化。例如

public class MyClass extends MyBase {

    public static final Map<String, AComplexClass> STATIC_MAP = new HashMap<String, AComplexClass> ();

    static {
        AComplexClass first = ComplexClassFactory.createComplexType1();
        first.configure("Something", "Something");

        STATIC_MAP.put("key1", first);

        // do some more
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,鉴于初始化C ++静态变量的局限性,如果我想定义相同的变量,这可能太复杂了STATIC_MAP,似乎我需要在.cpp文件中为每个AComplexClass对象命名变量,然后放入地图,在代码中创建一些垃圾也有机会让其他班级偶然提及他们。

那么,等效于此类静态初始化逻辑的C ++的最佳实践是什么?我认为这是相同的策略,但可能还有其他风格。

c++ java static

5
推荐指数
1
解决办法
1755
查看次数

是否有可能让非泛型方法返回泛型类型?

在Java中我可以轻松地写:

public interface MyInterface<T extends Object>
Run Code Online (Sandbox Code Playgroud)

然后有一个方法在运行时确定T,如:

public MyInterface<?> DetermineObjectAtRuntime()
Run Code Online (Sandbox Code Playgroud)

但是在C#中哪里<?>不可用,我需要用类型调用方法; 这意味着我需要事先了解类型.

  1. 是否可以从非泛型方法返回泛型类型?
  2. 如果没有,如果我有一个具有该类型的对象实例,我如何计算出类型来调用这样的泛型方法?

对于那些不确定这是什么的人 - 我有一组数据结构,它们使用不同的枚举作为字段索引器.所有消息都从具有该枚举的公共通用接口扩展为类型变量.现在我需要编写一个方法,从byte []数组反序列化所有不同类型的消息.

c# java generics

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