R16B02 erl_db.c:1272
/* we create table outside any table lock
* and take the unusal cost of destroy table if it
* fails to find a slot
*/
{
DbTable init_tb;
erts_smp_atomic_init_nob(&init_tb.common.memory_size, 0);
tb = (DbTable*) erts_db_alloc(ERTS_ALC_T_DB_TABLE,
&init_tb, sizeof(DbTable));
erts_smp_atomic_init_nob(&tb->common.memory_size,
erts_smp_atomic_read_nob(&init_tb.common.memory_size));
}
我的曲。 为什么要这样做? init_tb只使用common.memory_size字段。 为什么不使用整数替换?
希望我已经理解了你的实际问题。
正如我们从代码本身了解到的那样,erlang VM 具有 SMP 模式(简单地说,多个内核上的多个 erlang 调度程序)。在这种情况下,最好的方法(性能方面)是使用原子操作而不是锁。在内部,您指向的操作可能使用本机 CAS [http://en.wikipedia.org/wiki/Compare 和交换](比较和交换)操作。