add custom lock to protect membership which should have a good concurrency; the cost is that adding member can take a really long time if the usage of membership is really intensive; not tested yet