inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Windows 시스템 프로그래밍 - 기본

임계영역 기반 동기화

GetString 에서 free하지 않고 가져오기만 했을 때는 동기화가 필요없나요?

해결된 질문

338

SIsB

작성한 질문수 19

0

강의에서 GetString 도 free(...) 를 호출하고 = NULL; 을 호출하기에 WRITE 요소가 있어 동기화가 필요하다 얘기해주셨는데 그렇다면 정말 sprintf_s 로 버퍼를 복사해오는 읽기만 있다면 GetString 함수를 동기화할 필요가 없나요? 두 Worker Thread에서 free(...) 를 호출한 이후에 Main Thread 에서 그 값을 버퍼로 복사해오는 읽기 작업을 한다면 제대로된 문자열을 복사해오지 않을 수 있을 것 문제가 발생할 수 있어보여서여

A Thread는 WRITE / B Thread는 READ 만 했을 때 READ함수에는 동기화를 하지 않아도 되는지 궁금합니다.

c system-programming vc++

답변 2

0

널널한 개발자

네, 단순히 읽기만 하더라도 동기화는 필요합니다. sprintf_s() 같은 함수가 수행되는 동안 읽으려는 원본 메모리에 변화가 발생 할 수도 있기 때문입니다. 즉, 동기화는 읽기/쓰기에 모두 걸어주는 것이 일반적입니다. 그러나 본 수업에서 다루지 않은 Interlock 함수를 활용한 동기화 기법도 있습니다. 관련 용어로 Lock-free가 있습니다. 참고하시기 바랍니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

GetString 함수에서 free를 호출하고 NULL로 설정하는 것은 메모리 누수를 방지하기 위한 조치입니다. 따라서, GetString 함수를 호출하는 각각의 쓰레드에서 free가 호출되어야 합니다.

sprintf_s로 버퍼에 문자열을 복사하는 경우, 값을 가져오는 것은 읽기 작업에 해당합니다. 이 경우 별도의 동기화를 할 필요는 없습니다. Write 작업을 하는 쓰레드에서의 동기화가 완료된 후에 값을 읽는 쓰레드에서는 별도의 동기화를 할 필요가 없습니다.

따라서, A 쓰레드가 Write 작업을 하고 B 쓰레드에서 Read 작업을 할 때, B 쓰레드의 Read 함수에 대한 동기화는 필요하지 않습니다.

감사합니다.

세마포어 개수에 따른 스레드 점유상태

0

61

2

메모리 맵과 비동기 입/출력 조합 #2 수업내용에 질문있습니다.

0

96

2

힙 메모리 블럭 관리 방법 질문

0

97

2

MapViewOfFile 원리 관련 질문있습니다

0

102

1

가상 메모리 시스템 영역 구분

0

96

2

스택 크기 결정 단계

0

75

2

시스템프로그래밍-응용편

0

130

2

바이트와 관련된 유튜브 영상을 못 찾겠어요ㅠㅠ

0

94

2

파일 복사에 관한 질문입니다

0

114

2

세마포어 예제에 대한 질문이 있습니다.

0

111

2

메모장 쓰레기값 ?

0

133

2

64 bit 운영체제라면 가상메모리가

0

180

2

alertable Wait 상태 질문있습니다

0

226

1

GetCurrentDirectory 관련 질문

0

169

2

세마포어 예제중 형변환에 대한 질문

0

162

2

강사님 dll 지연로딩 관련하여 질문 드립니다

0

205

3

선장님 , _beginThreadEx() 함수 원리는 어디서 정보를 얻을 수 있을까요?

0

286

2

메모리 맵 강의 예제의 결과가 이상합니다.

0

227

1

강사님 파일입출력(Callback함수)와 관련하여 질문 드립니다.

0

348

2

dll 명시적 링크 오류 (원인 및 해결 방법이 필요 합니다)

0

968

2

static 영역의 rw 가능한 곳은 어떤 데이터가 담기는지 궁금합니다.

0

223

1

TerminanteProcess 와 관련하여 질문 드립니다.

0

172

1

강사님 스레드 관련 질문 드립니다.

0

226

1

강사님 메뉴얼 중 이것도 궁금해서 여쭤봅니다.

0

210

2