Pthread API를 활용한 여러 스레드 간 메모리 공유 및 동기화

2024. 5. 21. 20:48코딩 도구/운영체제

반응형

 Pthread API를 활용한 여러 스레드 간 메모리 공유 및 동기화

https://www.youtube.com/watch?v=mfKPRdu3A_4

이 영상은 Pthread API를 활용한 여러 스레드 간 메모리 공유 및 동기화에 대한 내용을 다루고 있습니다.
스레드 간에 같은 메모리를 공유하면서 발생하는 문제를 설명하며, mutex lock을 활용한 스레드 동기화의 필요성과 작동 방식을 다룹니다.
각 스레드는 전함수를 순차적으로 실행해야 하는 부분을 지정하기 위해 mutex lock을 이용하여 한 번에 하나의 스레드만 해당 부분을 실행하도록 하는 방법을 소개합니다.
동기화가 중요한 이유와 mutex lock을 통한 스레드 간 상호배제에 대한 중요성을 설명합니다.
즉, 하나의 코드 영역에는 한 번에 하나의 스레드만 접근할 수 있도록 하는 것이 프로그램의 정확성을 유지하는 데 중요하다는 내용을 포함하고 있습니다.
 

Pthread과 랜덤 넘버의 특징은?


Pthread twos는 메모리를 공유하는 stride를 나타내며, 랜덤 동작을 하도록 하죠.
랜덤은 초기 정보에 의존하며, 시드값에 의해 랜덤 번호가 결정되어요.
프로그램이 각 실행 시 다른 시드값을 가지도록 하기 위해, 현재 시간단위 대신 마이크로초로 시드값을 설정했고, 각 실행마다 다른 랜덤 번호가 생성되도록 했어요.
sleep은 랜덤 시간동안 수행되며 쓰레드 실행 후 메인 쓰레드 종료한답니다.

쓰레드 간 값과 메모리 공유 예시란?


쓰레드 1이 먼저 만들어지고 실행된 후 쓰레드 2가 실행되며, 쓰레드 1이 생성되고 그 후 쓰레드 2가 생성됩니다.
쓰레드가 15번 라인에서 시간을 소비하는 만큼 쓰레드 실행 순서가 약간 다르게 됩니다.
두 쓰레드가 메시지를 출력하기 전에 메모리 공유를 통해 같은 메모리 영역에서 실행됩니다.
쓰레드 1이 '안녕하세요'를 출력하고 메시지 값을 변경한 뒤, 쓰레드 2가 '안녕'을 출력하며 메시지에 접근해 이를 '안녕 가라'로 변경합니다.

스레드 간 공유 메모리의 문제와 해결책


프로그램이 실행될 때, 스레드 간 공유 메모리가 서로 영향을 주는 예시를 설명해요.
세 번에 걸쳐 프린트된 메시지에서, 첫번째 스레드가 메시지를 출력한 뒤 다음 스레드가 해당 메시지를 덮어쓰며 결과가 바뀌는 상황을 제시해.
pthread mutex lock을 이용한 메시지 출력 순서를 제어하여 세 개의 스레드 간 상호작용을 보여줘요.
세 번의 반복을 통해 상호작용 과정에서의 스레드 간 간섭이 없음을 시연해.

프로그램에서의 뮤텍스 잠금 기능?


동작은 Pthread mutex로 보호돼요.
잠금(mutex)은 상호 배타적 잠금을 의미하며 전역 변수로 초기화돼요.
락 변수는 전역 변수로 구성돼 모든 스레드가 공유하고, 하나의 스레드만 락을 획득할 수 있어요.
한 스레드가 락을 획득하면 다른 스레드는 차단돼요.
Pthread_mutex_lock이 실행되면 한 스레드만 다음 명령어로 이동할 수 있어요.
스레드가 잠금을 획득하고 다음 명령어로 이동하죠.

스레드 간 동기화 및 락킹 예시


먼저, 'view text unlock'을 실행하면 스레드 넘버 두가 락킹 작업으로 차단되어 있던 스레드가 락을 받고 다음 명령어로 이동해요.
그 순간, 스레드 넘버 두는 이미 락을 보유하고 있기 때문에, 스레드 넘버 하나는 차단될 것이에요.
스레드 넘버 두가 락을 보유한 채로 멈춰있는 동안, 스레드 넘버 하나는 이 락 작업을 통과할 수 없어 계속해서 차단 상태를 유지하게 돼요.
이로써, 두 스레드 간의 락킹 동기화를 통해 나란히 실행되어야 하는 코드 영역을 구현해요.
이 동기화는 프로그램의 정확성을 보장하는 데 매우 중요하며, 서로 다른 코드 영역이 순차적으로 실행되어야 하는 점을 강조해요.
상호 배타 블록을 사용하여 특정 코드 부분이 항상 순차적으로 실행되도록 보장함으로써 락킹은 이러한 동작을 확실하게 해요.
이는 우리가 확인한 세 번째 예시였어요.

 

반응형