최신 라이브러리 버젼과 코드 호환이 안 되는걸 확인했습니다. 강의 제작당시 버전으로 fix해 두었으니 node_modules 폴더와 package-lock.json 파일을 삭제 강의 코드 최신버전으로 git pull npx hardhat test ./test/Greeter.test 실행 이 방법으로 실행되는걸 확인했습니다.
수정된 코드도 문제가 있습니다. 의심하신 상황이 발생 할 수 있습니다. Section7의 코드는 문제가 있고 Interlocked 클래스만 가지고 해결할 수 없습니다. writeCount와 readCount의 비교와 변경이 Atomic Operation이어야 하기 때문에 반드시 lock이 필요합니다. 혼란을 드려 죄송합니다. ㅠㅠ
답변은 그럴수 없습니다. 임계영역에서는 반드시 한 스레드만 실행가능합니다. 코드를 보면 Wait에서 Blocking이 되기 때문에 DeadLock이라고 생각하실수도 있는데 Section4 코드에서 PulseAll과 Wait 함수 부분에 BreakPoint를 거시고 F10으로 한 스텝씩 확인해보시면 어떤 순서로 실행되는지 확인이 가능합니다. 확인해보시면 Monitor.Wait이 호출되면 lock이 해제되는걸 알수 있습니다.
만약에 Contract Compile 되신다면 경고는 무시하셔도 되는데 Compile이 안되시는 거라면 그 원인이 너무 많아서 알려드리기가 어렵습니다. 방금 소스코드 전체를 다운로드 다시받고 npx hardhat compile 명령어를 실행했을때 Compile에 문제가 없는건 확인했습니다.
hardhat/console.sol 파일은 우리가 추가해야 되는 파일은 아닙니다. hardhat 개발환경에서 import만 하시면 쓸 수 있습니다. 자세한 내용은 아래 링크 참조 바랍니다. https://hardhat.org/tutorial/debugging-with-hardhat-network