강의

멘토링

로드맵

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của bu85034594
bu85034594

câu hỏi đã được viết

Lập trình FreeRTOS

Tái nhập cảnh

재진입가능여부에 관한 질문

Viết

·

63

1

void swap(int *x, int *y) {

int temp;

temp = *x;

*x = *y;

*y = temp;

}
안녕하세요 강사님 위 함수가 temp를 지역변수로 선언하면 재진입가능한 함수가 된다고하셨는데
x와 y 포인터 접근으로 공유자원이 발생할 수 있는 상황이 발생할 수 있어
재진입 불가능한 함수이지 않나요?

잦은 질문드려 죄송합니다.

운영체제임베디드FreeRTOS

Quiz

51% người trả lời sai. Hãy thử ngay!

Nguyên nhân chính gây ra vấn đề khi truy cập đồng thời vào biến dùng chung là gì?

Do độ ưu tiên của các tác vụ khác nhau

Chuyển đổi ngữ cảnh xảy ra ở mức lệnh mã C nên

Do chuyển đổi ngữ cảnh xảy ra trong thao tác không nguyên tử

Hàm được gọi quá thường xuyên

Câu trả lời 1

1

guileschool님의 프로필 이미지
guileschool
Người chia sẻ kiến thức

안녕하세요. 박상우님!

아래와 같이 사용하시면 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);

- 끝 -

Hình ảnh hồ sơ của bu85034594
bu85034594

câu hỏi đã được viết

Đặt câu hỏi