재진입가능여부에 관한 질문
111
작성한 질문수 4
void swap(int *x, int *y) {
int temp;
temp = *x;
*x = *y;
*y = temp;
}
안녕하세요 강사님 위 함수가 temp를 지역변수로 선언하면 재진입가능한 함수가 된다고하셨는데
x와 y 포인터 접근으로 공유자원이 발생할 수 있는 상황이 발생할 수 있어
재진입 불가능한 함수이지 않나요?
잦은 질문드려 죄송합니다.
답변 1
1
안녕하세요. 박상우님!
아래와 같이 사용하시면 void swap(int x, int y) 은 재진입에 대응할 수 있는 함수로서의 기능을 잘 수행해줍니다.
// 태스크 1
int a = 10, b = 20;
swap(&a, &b); // temp1은 태스크1의 스택
// 태스크 2 (동시 실행)
int c = 30, d = 40;
swap(&c, &d); // temp2는 태스크2의 스택
하지만, 아래와 같은 사용 예시에서는 재진입이 안된다는 점 양지하시기 바랍니다.
이건 swap 함수가 재진입 불가능해서가 아니라, 호출자가 같은 데이터에 동시 접근했기 때문입니다.
// 태스크 1
swap(&shared_x, &shared_y);
// 태스크 2 (동시 실행)
swap(&shared_x, &shared_y);
- 끝 -
Segger 사의 SystemView를 이용하여 디버깅해 보고 싶어요
0
40
1
ISR에서 xEventGroupSetBitsFromISR() 함수를 사용하려고 합니다.
0
43
1
logicsniffers에서 문맥전환 할때 prvExampleTaskHook() 함수 호출 관련
0
35
2
uC/OS-II RTOS 포팅 관련 질문
0
86
2
만약에 포팅을 할때 1년에 한번 잡는 치명적인 문제를 해결하는 코드가 들어갔다고 가정하면
0
130
2
STM32 포팅할 때 STM32 Project가 없음
0
393
2
FreeRTOS 멀티코어 지원안됨?
0
172
2
[소스코드 분석-configUSE_TIME_SLICING] TASK1,2의 우선순위가 동일할 때, configUSE_TIME_SLICING값 변경에 따른 출력 변화
0
151
2
포팅 부탁드립니다!
0
99
1
포팅 부탁드립니다. <NUCLEO-G071RB>
0
117
2
상호배제 후 되지를 않아서 질문드립니다.
0
109
1
수료증 발급 기준 수정 요청
1
125
1
01_TASKMAN프로젝트 디버깅 모드 실패
1
203
2
그러면 malloc/free가 아닌 동적할당자를 써서 메모리를 할당했기떄문에
1
114
2
실행순서
1
123
2
uart 전송중에는 스위칭이 금지되나요?
1
129
2
스택오버플로우 실습 중 stack size 설정 질문
0
138
2
포팅 원합니다.
2
113
2
코루틴 실습질문
1
159
2
TODO 2번 문제
1
205
4
10. 선점형 커널 그림 설명중 우선순위가 반대인 경우에도 Task B가 먼저 수행되나요?
1
132
2
디버거모드에 진입이 안됩니다.
0
238
2
prvExampleTaskHook 함수 호출 부분에 대해 문의드립니다.
0
177
2
보드 STM32H735IG와 강의 호환 여부 문의
1
204
3





