[erlang-questions] Questions about ETS locking

Sverker Eriksson <>
Mon May 7 14:55:39 CEST 2012


skyman wrote:
> Hi all,
>
>
> I know when access an ETS table, there are wo locks that need to be taken.
> 1) A lock to access the meta table, to convert the numeric table identifier
> to a pointer to the actual table.
>
> 2) The lock for the table itself (either a read or write lock).
> I know in the SMP mode£¬an ETS table must be locked when access it, but I don't make sure that must an ETS table be locked in the non-SMP mode(only one scheduler)?
>   
An SMP-enabled emulator will do the locking even when running only one 
scheduler.
A non-SMP emulator (erl -smp disable) will not do any locking.

> Another question is, whether the default ETS table locking is on table-level or on record-level?
> Thanks in advance!
>
>   
The default locking is on table-level, allowing only one update 
operation at a time per table.
Table option write_concurrency will enable locking on a more fine 
grained level, allowing concurrent update operations. In current 
implementation 16 locks per table is used, which result in a probability 
of 1/16 that two random keys will collide on the same lock.

Option write_concurrency have no effect on ordered_set's.


/Sverker, Erlang/OTP Ericsson





More information about the erlang-questions mailing list