이 영상은 지금까지 만든 p2p 파일을 전체적으로 recapitulate하는 시간이다
이 영상을 보면서 생기는 의문은 몇가지 있다
1. 왜 read(), write() 함수들이 peers들을 lock하면서 시작하지 않고 defer 에서 p.close()를 시작하지?
read()함수와 write() 함수는 lock, unlock이 아니라 close()함수를 쓰는데
그 이유는 read(), write()함수는 오류가 나면 clos()함수를 통해 오류난 peer.connection 을 삭제한다
삭제할 때 다른 곳에서 peer를 사용?수정?읽기?하고있다면 data race가 발생한다
그러므로 defer close()를 사용하여 Mutex를 사용해주는 것이다
2. write함수랑 read 함수랑 둘다 go routine으로 돌아가니까 write가 다 쓰면 바로 read()가 읽어야 하는거 아닌가? -> 그럼 4000이 보낸 메세지는 4000이 받아야 하는게 아닌가?
3. 그리고 이번 initPeer() 함수에서 왜 data race가 발생하는 코드가 있었는지 아직도 모르겠습니다
영상 뒷부분에는 data race를 고치기 위해 initPeer() 함수에 락, 언락 코드를 첨가해준다
끝!
꼭 위 3 문제 해결하기!
'go언어 블록체인' 카테고리의 다른 글
노마드 코인 12-25 리뷰 (0) | 2021.08.18 |
---|---|
노마드 코인 12-24 리뷰 (0) | 2021.08.18 |
노마드 코인 12-22 리뷰 (0) | 2021.08.18 |
노마드 코인 12-20 리뷰 (0) | 2021.08.17 |
노마드 코인 12-19 리뷰 (0) | 2021.08.17 |