여기에 가설이 있지만 확인하기가 다소 힘듭니다.cpp 객체 메소드에는 자체 스택 프레임이 있습니까?
두 스레드가 동일한 객체 인스턴스의 동일한 메소드를 호출 할 때 각 호출 스레드마다 고유 한 스택 프레임이 있습니까? 컴파일 된 바이너리에서 클래스를 메모리의 함수 정의로 채워진 정적 코드 섹션으로 이해하고 다른 객체 간의 유일한 차이점은 후드 아래로 전달되는 this
포인터입니다.
그러나 스레드를 호출하는 스레드는 자체 스택 프레임을 가져야합니다. 그렇지 않으면 같은 개체 인스턴스의 동일한 멤버 함수에 액세스하려고하는 두 스레드가 서로의 로컬 변수를 손상시킵니다.
여기 다시 말씀 드리지만, 두 스레드가 동시에 this
을 수정하여 개체 데이터를 손상시킬 수 있는지 여부를 언급하지는 않습니다. 그 사실을 잘 알고 있습니다. 두 스레드가 동일한 인스턴스의 동일한 메소드를 동시에 입력하는 경우, 해당 컨텍스트의 로컬 변수가 메모리의 동일한 위치인지 여부와 관계없이 더 많은 것을 얻고 있습니다. 다시, 제 가정은 그들이하지 않는다는 것입니다.
"스레드 안전 컴퓨팅"의 핵심을 만지고 있습니다. – Floris