An Automatic Approach of Fine-grained Locking for Linked Data Structure