Usage & Examples
key_mutex is a mutex module that supports -
- reader-writer mutex
- lock on a named key
- nodejs cluster
- distributed mutex on network
Example 1 - simple mutex
var key_mutex = ;var mutex = key_mutex; { return { ; };} { mutex;} { mutex;} { ; ;}
output
ex1_task_a, step 1
ex1_task_a, step 2, =======
ex1_task_b, step 1
ex1_task_b, step 2, =======
Example 2 - await the return value
"key_mutex" can await the return value of internal function.
{ var ret = await mutex; console; //output 'returns from ex2_task_a'}
output
ex2_task, step 1
ex2_task, step 2, =======
returns from ex2_task
Example 3 - supports exceptions
"key_mutex" supports exceptions.
{ try var ret = await mutex; console; catcherr console; }
output
ex3_task, step 1
throw my error
Example 4 - mutex with named key
Bind "key_mutex" with a named key, only the same key can lock with each other, which is useful especially when we need to lock the very record line in database.
{ mutex;} { mutex;} { ; //use mutex with named key 1234 ; //use mutex with named key "abcd" ; //use mutex with named key "abcd" ; //use mutex with named key 1234}
output
ex4_task_a, key = 1234, step 1
ex4_task_b, key = abcd, step 1
ex4_task_a, key = 1234, step 2, =======
ex4_task_b, key = abcd, step 2, =======
ex4_task_b, key = 1234, step 1
ex4_task_a, key = abcd, step 1
ex4_task_b, key = 1234, step 2, =======
ex4_task_a, key = abcd, step 2, =======
Example 5 - Reader-writer mutex
"key_mutex" supports reader-writer mutex.
{ mutex;} { mutex;} { mutex;} { ; ; ;}
output
ex5_task_a, reader step 1
ex5_task_c, reader step 1
ex5_task_a, reader step 2, =======
ex5_task_c, reader step 2, =======
ex5_task_b, writer step 1
ex1_task_b, writer step 2, =======
Example 6 - Reader-writer mutex with named key
Bind "reader-writer" mutex with a nemed key.
{ mutex;} { mutex;} { mutex;} { mutex;} { ; ; ; ;}
output
ex6_task_a, key = 1234, reader step 1
ex6_task_b, key = 5678, writer step 1
ex6_task_c, key = 1234, reader step 1
ex6_task_a, key = 1234, reader step 2, =======
ex6_task_b, key = 5678, writer step 2, =======
ex6_task_c, key = 1234, reader step 2, =======
ex6_task_d, key = 5678, reader step 1
ex6_task_d, key = 5678, reader step 2, =======
APIs
Module
var key_mutex = ;
Create a mutex
var mutex = key_mutex;
Create a named mutex
For named mutex, you can specifiy a string name as parameters, which is useful if the mutex is created after cluster forked.
var mutex = key_mutex;
Create a distributed mutex on network
We can setup named mutex on server. for example --
- On host 192.168.1.2, start a mutex server on port 8888,
key_mutex;
- Other client can create mutex on this server
key_mutex;
Distributed mutex API
key_mutex;var mutex = key_mutex;
Simple lock
mutex;
Simple lock with key
mutex;
Reader lock
mutex;
Reader lock with named key
mutex;
Writer lock
mutex;
Writer lock with named key
mutex;
destroy the mutex (required by cluster or distributed mode only)
mutex;