작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
114
·
수정됨
0
안녕하세요. 강의 잘 보고 있습니다. 질문 드립니다.
t1, t2 두 개의 쓰레드를 만들고 실행시켰습니다.
t1.Start();
t2.Start();
Start()라는 함수가 쓰레드 클래스 말고 싱글 쓰레드 개발환경에서의 그냥 아무 함수라고 가정한다면,
t1.Start()가 먼저 실행되고
Start함수가 끝날때 까지 기다린 후
t2.Start()가 먼저 실행되는게 '문법적으로' 맞잖아요??
하지만 쓰레드 클래스의 경우에는
t1.Start() 가 들어왔을때는
t1 쓰레드한테 어떤 일을 실행 시킨 후
t1이 작업 끝나던 말던
바로 다음줄 코드를 실행 시키는건가요?
즉, t2.Start() 를 실행 시키는건가요?
그렇게 해서 각 쓰레드(일꾼)이 작업을 하다 여러
문제들이 생기는거구요
멀티 쓰레드 개발환경에서 일어날 수 있는 문제점은
확실하게 이해하고 있는데,
제일 첫 부분인 이게 도통 이해가 안돼서 질문 남깁니다.
그동안 해오던 코딩이 부정당하는 기분이라...
쓰레드 클래스만 저런식으로 작동된다는 정보가 어디에도 없네요..
문법적으로 저렇게 된다고 확신이 필요합니다 ㅠㅠ
요약하자면, 컴파일러는 'Start 함수' 를 만나게 될 경우
그 쓰레드한테 작업을 실행시키지만,
그 쓰레드의 작업을 기다려 주지는 않고
바로 다음 줄 코드를 실행 시키는건가요?
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. jwen7님.
쓰레드의 실행 순서 및 동작 방식에 대해서는 아래의 기존 질문과 답변들이 도움될 것 같습니다.
요약: 메인이 끝난 뒤에 실행한다기보다 동시에 실행됩니다. 쓰레드는 실행한 순간부터 독립적으로 작동하기 때문에 순서를 예측하기 어렵습니다.
요약: 쓰레드가 동시에 실행되며, 순서에 따라 실행되는 것이 아니라 각각 독립적으로 작동합니다. 동시에 작업을 수행하기 때문에 _complete
가 true
가 되기 전에 _answer
값을 읽을 수 있는 상황이 발생할 수도 있습니다.
요약: Thread.Sleep
는 현재 실행 중인 쓰레드만 재우는 것이며, Start
를 호출하면 쓰레드가 바로 실행되어 다른 쓰레드의 실행이 완료될 때까지 기다리지 않습니다.
요약: 쓰레드는 운영체제에 의해 관리되며, 운영체제가 쓰레드 스케줄링을 통해 실행 순서를 결정합니다. 특정 쓰레드의 실행 순서를 보장하는 것은 어렵습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.