在Intel的文档称
该指令可以与
LOCK前缀一起使用,以允许指令以原子方式执行.
我的问题是
可以CMPXCHG用内存地址操作吗?从文档看来似乎没有,但任何人都可以确认只能在寄存器中使用实际的VALUE,而不是内存地址吗?
如果CMPXCHG不是原子级和高级语言级CAS必须通过LOCK CMPXCHG(带LOCK前缀)来实现,那么引入这样一条指令的目的是什么?
从当前的JDK 1.8实现开始,它构建一个匿名对象来保存lambda函数并在这样的对象上调用函数.这个匿名对象是在每次调用中重用,还是每次都重新创建一个对象?
我有很长的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 ++的最佳实践是什么?我认为这是相同的策略,但可能还有其他风格。
在Java中我可以轻松地写:
public interface MyInterface<T extends Object>
Run Code Online (Sandbox Code Playgroud)
然后有一个方法在运行时确定T,如:
public MyInterface<?> DetermineObjectAtRuntime()
Run Code Online (Sandbox Code Playgroud)
但是在C#中哪里<?>不可用,我需要用类型调用方法; 这意味着我需要事先了解类型.
对于那些不确定这是什么的人 - 我有一组数据结构,它们使用不同的枚举作为字段索引器.所有消息都从具有该枚举的公共通用接口扩展为类型变量.现在我需要编写一个方法,从byte []数组反序列化所有不同类型的消息.