inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 되새기는 C 프로그래밍

스레드 동기화

실습 중에 혹시 예외 발생하신 분들을 위해

해결된 질문

337

우성

작성한 질문수 4

3

Enter, Leave로 동기화 후 메인 쓰레드 루프 탈출을 위해

q를 입력했을 때 간헐적으로

아래와 같은 에러가 발생하였습니다


요거.. 선생님께 여쭤보려다가 문득 원인을 찾았습니다

혹시 저와 같은 에러를 겪으신 분들을 위해

정리를 하자면 아래와 같습니다

 

메인 쓰레드 루프 탈출 까지는 정상적으로 수행됩니다

다만, DeleteCriticalSection 함수 호출 후

return 코드를 호출하기 전 찰나의 순간에

set 또는 reset 워커 쓰레드에서

EnterCriticalSection을 호출하여 예외가 발생합니다

 

즉,

DeleteCriticalSection과 return의 코드 호출은

원자적이지 않기 때문에 두 함수가 수행되는 중간에

다른 워커 쓰레드에서

EnterCriticalSection 함수를 호출하는 경우인데요

 

이는, Delete돼서 존재하지 않는
임계영역에 Enter를 시도하기 때문입니다

 

 

c kernel secure-coding

답변 1

1

널널한 개발자

와우~~~! 질문과 동시에 스스로 해결도 하시고 결과까지 공유해주셨네요. :)

해당 예제는 작업자 스레드의 종료과정을 고려하지 않고 있어서 문제가 됐습니다. 모든 작업자 스레드가 종료된 후 메인 스레드가 종료되도록 수정하면 문제는 해결되겠습니다.

사소한 부분까지 꼼꼼하게 챙기시는 것을 보니...분명 좋은 시스템 개발자로 성장하실 것 같습니다.
정보 공유 고맙습니다. :)

병행성 제어

0

53

2

질문이 있습니다(강의와 거의 상관이 없는)

0

79

2

컴파일러 서적 질문입니다

0

165

1

코드생성 및 최적화 질문입니다

0

168

1

Hex Editor를 이용한 다국어 번역 관련 질문입니다

0

213

2

큐의 배열을 넘겨도 정상작동합니다

0

159

2

캐너리비트에 관하여 질문

0

220

3

상수화된 문자열에 질문있습니다

0

176

1

함수 호출 매개변수 전달에 대한 질문 드립니다.

0

195

1

단항 증감 연산에 따른 다른 접근에 대한 질문있습니다.

0

212

2

함수호출 규약 종류에 따른 장단점 여부

0

235

2

정적라이브러리 링크 오류

0

227

1

const char *를 char*에 초기화할때의 컴파일 에러 처리 방식 문의

0

359

2

pszParam 수정이 왜 Hello World print에도 영향을 미치는지 이해가 잘 안됩니다.

0

261

2

비선형 자료구조

0

314

1

자료 구조 공부 후에

0

357

1

강의자료 관련

0

254

1

마지막에 말씀하신 부분 질문드립니다.

0

216

1

문자열 관련 질문 드립니다

0

293

1

라이브러리

0

276

1

부동소수점

0

397

1

왜 변수 주소 사이에 offset이 있는 건가요?

0

307

2

stack 쌓는 순서

0

515

1

함수호출이랑 쓰레드

0

415

1