왼쪽은 -1이 들어있는 공간(Node, 우측 클래스) 5개를 만든 후 두 개의 Task를 사용하여 공간을 1 혹은 2로 채우는 함수야.
첫번째 Task는 공간의 왼쪽부터 오른쪽으로 1을 채워나가고, 두번때 Task는 공간의 오른쪽부터 왼쪽으로 2를 채워나가.
두 Task는 공간이 -1이 아니면(1 혹은 2가 채워져 있으면) 멈춰.
공간을 5개 설정해두면 랜덤으로 [1][1][1][2][2] 혹은 [1][1][2][2][2]로 채워져.
이때 질문
1. 왼쪽 빨간 상자 안의 lock는 꼭 필요해? 두 Task가 동시에 3번째(중간) 노드에 접근하지 말라고 해둔 건데, 없어도 정상작동은 하더라고.
2. Task.Delay는 그냥 Task를 블록 상태로 만들고 싶어서 둔 건데, 1밀리초 기다리기 이런 거 없이 바로 블록상태로 만들 수는 없나?
3. 왼쪽 초록 상자의 Sleep은 비동기 Task가 끝난 후 Node들의 값을 읽어오기 위해 둔건데, 비동기 Task의 완료는 변수 참조같은 외부적인 방법 말고는 알림을 받을 수 없나?
아직 관련 개념이 부족해서 질문도 맞게 한건지 모르겠다... 질문이 좀 이상하더라도 이해해줘.
이 댓글은 게시물 작성자가 삭제하였습니다.
lock은 아마 안걸면 스레드1에서 값을 확인하고 if문 안쪽으로 넘어왔는데 그 순간에 스레드2에 의해 값이 바뀌거나 해서 잘못 작동하는 경우 막기 위함일껄
저 코드처럼 단순히 안에 무슨 값이 들어있던 상관없이 입력만 할꺼라면 lock걸 필요 없는걸로 암
ㅇㅎ 땡큐. 코드는 배운거 토대로 내가 새로 짠건데 제대로 쓴게 맞는지 궁금했음.
3은 continuewith 쓰면 되지아늘까요 행님
오호 이런게 있구나 ㄱㅅㄱㅅ