강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

reewoo46743300 のプロフィール画像
reewoo46743300

投稿した質問数

クマの本で簡単に学ぶ最低限のオペレーティングシステム論

共有リソースと臨界ゾーン

공유자원과 임계구역

解決済みの質問

作成

·

311

0

안녕하세요 선생님

강의 정말 잘 듣고 있습니다..!

레지스터에 대한 설명이 잠깐 나와서 궁금한 점이 생겼는데요..!

생산자-소비자 문제를 설명하시면서,

sum = sum + 1;

sum -= 1;

기계어로 쪼개보면 원자성이 보장되지 않아 문제가 발생하는 것을 확인했습니다.
그런데 값을 읽고, 연산할 때 eax 레지스터를 사용하는 것으롭 봤는데요..!

두 곳에서 사용되는 각 eax는 이름만 같을 뿐 사용되는 영역은 달라서 위에 eax는 1이고, 아래의 eax는 -1을 가지는 건가요??

운영체제

回答 2

1

nullnull8537님의 프로필 이미지
nullnull8537
インストラクター

EAX 레지스터 뿐만 아니라 각 스레드마다 개별적인 레지스터 값들 별도로 저장해 갖고 있습니다. 😄

1

nullnull8537님의 프로필 이미지
nullnull8537
インストラクター

만일 두 연산이 순차적으로 한 스레드 내에서 실행된다면 서로 영향을 주지 않습니다. 그러나 sum이 전역변수이고 1씩 누산하거나 감산하는 연산을 별도 스레도 분리해 동시에 실행한다면 동기화 문제가 발생할 있겠습니다. 이 경우 EAX에 저장된 값은 서로 다를 수 있습니다. 참고하시기 바랍니다. 😄

HELLO님의 프로필 이미지
HELLO
質問者

답변 감사드립니다.

그러면 eax는 스레드마다 독립적으로 있다라고 봐도 되는 걸까요?

reewoo46743300 のプロフィール画像
reewoo46743300

投稿した質問数

質問する