작성
·
185
0
1. A라는 쓰레드가 Push에서 락을 잡는다.(다른애가 Push를 못하는 상황)
그리고 _jobQueue에다가 일감을 밀어 넣는다.
2. lock 안에서 flush가 true로 바뀌어서 Flush함수로 간다.
3. A쓰레드는 Flush함수에 들어와서 while문안에서 Pop을 한다.
4. Flush에서 Pop을 하는 순간 A는 락을 잡고 "_jobQueue.Count == 0" 이 될때까지
retrun _jobQueue.Dequeue();를 하면서 Flush의 while문을 돌게된다.
*********
<질문>
A라는 쓰레드가 Push에 와서 최초의 _flush를 true로 바꾸어 주어서
모든 쓰레드들이 접근이 가능한 _flush는 true인 상태여서
A가 Flush함수를 실행하러 계속 안에 있고
다른 B라는 쓰레드가 Push에와서 락을 잡고 일감을 밀어 넣는다고 해도
_flush는 true라서
Push안의 flush를 true로 바꿀 수 없어서
if (flush)에 조건이 안맞아 락만 걸고 일감을 밀어넣고 나오고
A만 Flush를 실행할 수 있고 A만 Flush함수에 계속 상주해 있고
다른애들이 계속 일감만 밀어 넣어주는 방식인가요??
Pop에서 락을 건 이유는 그냥 데이터를 안전하게 꺼내기 위함이고...
이렇게 이해했는데 맞을까요??