어떠한 로직에서 A객체와 B객체를 사용하면서
Scope locking을 거는데
A객체 scope에서 B객체 lock을 거는데
다른 스레드에서 B객체 scope에서 A객체 lock을 걸면
데드락 걸리잖아여. (CriticalSection 썼을 때)
따라서 실질적으로는 로직별로 락을 걸어준다는 것은 천재 아니면 힘든거 같고...
전역적으로 CriticalSection 하나 두고 이걸로 동기화 하면 많이 느릴려나여???
이거 공유자원들을 대체 어떻게 관리하지....
락을 거는 순서를 정해놓으면 괜찮음. lockB를 걸기 전에는 무조건 lockA를 걸어야한다는 식으로
그런데 그 객체들이 다 최상위 객체들이라 락 순서 정하기도 애매해서..
락 순서라고 해도 A,B,C,D 순서대로 건다고 치고, B,D를 락할때는 B를 먼저 락하고 D를 락한다는 규칙만 제대로 지키면 데드락 많이 줄어들텐데
C를 락걸때 A,B를 다 걸라는 소리가 아니라
그러면 전역적으로 동기화객체 하나 있는건 비추천??
ㅇㅇ 그건 병렬화를 하는 의미가 전혀 없어지잖아
C++11에는 여러 mutex를 한번에 동시에 lock할 수 있는 함수가 지원되니까 이걸 쓰면 좋긴 함