• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

멀티 프로세싱 환경에서의 Locking

21.04.05 18:52 작성 조회수 179

0

안녕하세요! 좋은 강의 제공해주셔서 감사드립니다.

강의를 듣던 중 궁금한 점이 있습니다.

1. Producer-Consumer 실습(36:18)에서 해당 코드를 수행 시 Producer와 Consumer가 각각 1개씩만 존재할 때 가끔 Consumer가 2번씩 수행되는 이유가 무엇인가요?

Producer와 Consumer가 여러 개 존재하고 소비하는 Item이 다르다면 모르겠지만, 한 개씩 존재하는데 소비하는 Item 이 같아 왜 그런지 이해가 잘 가지않습니다!

2. 만약 멀티 프로세싱 환경에서 서로 다른 프로세서에서 2개의 Producer를 동시에 수행시켜도 해당 코드에수 mutual exclusive를 보장하나요?

예를 들어 Producer1과 Producer2가 서로 다른 cpu core에서 pthread_mutex_lock을 동시에 수행하면 어떤 일이 벌어지나요?

조금 복잡한 질문 드린 것 같아 죄송합니다. 언제나 좋은 강의 감사합니다!

답변 2

·

답변을 작성해보세요.

1

1번은 해결하셨다니, 다행입니다. ^^;

2번에 대해서는 simple하게 생각하면 뮤텍스를 보장합니다.

서로 다른 코어에서 실행되더라도 뮤텍스 락을 획득한 프로세스만 임계영역에 진입하기 때문이죠.

하지만, 만약 뮤텍스 락을 메모리 변수 등으로 구현한다면, 상호배제가 안 될 수도 있겠죠.

그래서 멀티 코어 환경에서는 반드시 test_and_set이나 compare_and_swap 같은

하드웨어 인스트럭션으로 뮤텍스 락을 구현해 주어야 됩니다.

하드웨어 인스트럭션으로 뮤텍스 락이 구현되어 있다면, 

다른 코어에서 같은 CPU 클럭에 동시에 실행하더라도 동시에 락을 획득할 수가 없을 것입니다.

GE LO님의 프로필

GE LO

질문자

2021.04.07

하드웨어 단에서 반드시 지원을 해주어야하는군요..!

감사합니다!!

0

GE LO님의 프로필

GE LO

질문자

2021.04.05

질문 1은 세마포어의 S값이 1이 아닌 상태로 수행되었기 때문에 그렇군요 ㅎㅎ 조금 더 생각해보고 질문드릴걸 그랬습니다. 감사합니다.