Microsoft MVP성태의 닷넷 이야기
c# 함수의 호출 방식에 대해 궁금합니다! [링크 복사], [링크+제목 복사]
조회: 1404
글쓴 사람
cs린이 (ik7122 at naver.com)
홈페이지
첨부 파일
 

안녕하세요! 질문이 있어 글 올립니다.

util이라는 동적 class가 있을 때
A, B, C라는 class에서 util에 메모리 할당을 하여 각각 사용한다면
A에서 호출한 util class의 함수는 해당 메모리에 대해 스택에 함수 호출 정보가 생성될 것이고
B에서 호출한 util class의 함수는 해당 메모리에 대해 스택에 함수 호출 정보가 생성된다는 건 이해가 됩니다.


그럼 만약 util이라는 class가 static class고
A, B, C에서 static class util내의 static 함수를 호출한다면
호출한 순서대로 스택프레임이 생성되어 순차적으로 처리하나요?

여러 Thread에서 하나의 함수에 접근 시에도
해당 함수의 메모리 주소가 동일 메모리 주소라면
스택프레임이 생성되어 호출한 순서대로 처리를 해주는 것 인가요?
(순서를 보장하냐는 내용보다는 하나의 호출에 대해 처리가 완료가 되어야 다음 호출을 처리 할 수 있는 것인지..? 입니다..)









[최초 등록일: ]
[최종 수정일: 2/16/2022]


비밀번호

댓글 작성자
 



2022-02-16 09시11분
우선, 처음에 이해가 된다는 부분부터 설명을 하겠습니다.

"함수 호출 정보가 생성된다는" 의미를 보면, "A에서 호출"이나, "B에서 호출"이라는 식으로 클래스 입장에서 바라보시면 안 됩니다. 스택은 스레드마다 고유하고, 하나의 스레드가 A클래스의 Do라는 메서드를 호출해 util의 Calc 메서드를 호출하면 스레드의 스택에는 A.do -> util.Calc 메서드를 호출한 식으로 스택에 함수 호출 정보가 쌓입니다.

따라서, util 클래스가 static이라는 점은 저렇게 함수 호출 정보가 쌓이는 것에는 아무런 연관이 없습니다.

여러 Thread에서 하나의 함수를 접근해도, 함수 호출 정보는 각각의 스레드가 할당한 스택에 쌓이므로 서로 독립적으로 유지됩니다. 궁금하신 것이, 다중 스레드가 static 메서드를 호출했을 때 서로 동시에 메서드 실행을 못하는 거냐고 묻는 것 같은데요, 동시에 실행을 합니다. 각자의 스택에 함수 호출 정보를 쌓고 있고, 어차피 메서드 실행이라는 것은 "메서드가 컴파일된 기계어"를 스레드가 실행하는 것이며, 해당 기계어는 실행하는 동안 변하는 것이 아니므로 서로 다른 스레드가 동시에 메서드의 코드를 실행해도 아무런 문제가 없습니다.

혹시 또 이해가 안 되는 것이 있다면, 계속 질문해 주세요.
정성태
2022-02-16 11시09분
[cs린이] 저는 호출 당하는 클래스 입장에서 생각했었는데
그게 아니라 스택은 스레드마다 고유하다는 부분을 보니 한 번에 이해가 됐습니다.
항상 좋은 답변 감사합니다^^ 열심히 공부해겠습니다~!
[손님]

1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5795동기1/18/2023132동기 스레드와 메서드와 While [2]
5794박규동1/18/2023111.net publish 할때마다 runtimeconfig 값이 바뀌는 현상 [1]
5793후후훗1/18/2023151.NET Core 에서 사용중인 함수 후킹 방법 [2]
5792Wi...1/18/2023203소스코드 Log Write 기능을 리스트업 질문 [8]
5791PLC1/16/2023311C# - 실시간 5개 룸 모니터링 [15]
5790집으...1/13/2023207[UI 멈춤 현상]deadlock 관련 글을 보고 혹시나 하고 문의 드립니다. [4]
5789손님1/10/2023243스레드와 Async Task [2]파일 다운로드1
5788kr11/10/2023230C# 에서 제공하는 컬렉션들의 차이점이 궁금합니다. [3]
5787st...1/10/2023237STACKOVERFLOW [1]
5786De...1/9/2023276익명 클래스 말고 익명 구조체는 불가능한걸까요? [4]
5785음성...1/8/2023148음성인식 System.Speech - 문법에 사용된 언어가 음성 인식기의 언어와 일치하지 않습니다. [2]
5784MS...1/8/2023169MS워드에서 ctrl Z는 클립보드를 이용하나요? 아니면 참조자 이용하나요? [7]
5783구직자1/7/2023302C#개발자 구인광고와 초급개발자 [3]파일 다운로드1
5782Sq...1/5/2023230윈도우11 노트북에서 exe(Sqlite)만들어 윈도우 7 PC에 설치 시 [5]
5781Li...1/5/2023298List.Add("newobj") 속도는 빠른 편인지요? [11]
5780임세1/3/2023295C# 프로그래밍 10 책 구매한 사람입니다. 3부 자료는 어디서 다운 받을 수 있나요? [4]
5779이건우1/2/2023223안녕하십니까 루프안에서 메세지처리에 관하여 질문드립니다! [2]
5778이건우12/30/2022303안녕하세요 c#에서 dll참조 관련 질문드립니다. [4]
5777감사...12/29/2022229UI Thread에 Invoke 처리관련 궁금합니다. [3]
5776pd...12/28/2022317C# MouseUp Event + pdf [10]
5775민성12/28/2022233안녕하세요 Class 관련해서 예외처리를 하나로 받아낼수 있는 방법 [1]
5774중급12/27/2022479중급개발자란 어느 수준인지요? [4]
5773김영식12/26/2022268c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [1]
5772눈송이12/26/2022290Excel VSTO 는 왜 Net Core, Net 5, 6 버전을 사용하지 않나요? [2]
5771김훈12/26/2022207c# .net client application 망분리(내부망,외부망) 환경에서 의문의 외부사이트 호출 대기 [2]
5770lsh12/26/2022169클라우디움안에 있는 파일을 File.Copy 하고싶은데 코드로는 접근을 못하나요? [1]
1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...