Analysis of graph multithreading access performance with different synchronization mechanisms: mutext, shared mutex and atomic operations