ที่นี่เราจะดูว่าฟังก์ชัน reentrant ใน C หรือ C ++ คืออะไร ฟังก์ชันหนึ่งเรียกว่าฟังก์ชัน reentrant หากมีข้อกำหนดให้ขัดจังหวะฟังก์ชันนั้นในระหว่างการดำเนินการ จากนั้นให้บริการ ISR (Interrupt Service Routine) แล้วทำงานต่อ ฟังก์ชันประเภทนี้ใช้ในกรณีต่างๆ เช่น การเรียกซ้ำ การจัดการการขัดจังหวะของฮาร์ดแวร์
สำหรับฟังก์ชัน reentrant ควรมีคุณสมบัติบางอย่าง ดังต่อไปนี้ −
-
ฟังก์ชันประเภทนี้จะไม่ใช้ตัวแปรโกลบอลหรือสแตติกใดๆ ไม่มีข้อจำกัด แต่โดยทั่วไปไม่แนะนำ เนื่องจากอินเทอร์รัปต์อาจเปลี่ยนค่าของตัวแปรส่วนกลาง ดังนั้นหลังจากกลับมาจาก ISR ฟังก์ชันอาจได้รับค่าใหม่ และผลลัพธ์จะแตกต่างออกไป
-
ฟังก์ชัน reentrant ไม่ควรแก้ไขโค้ดของตัวเอง เราต้องการการกระทำของฟังก์ชันที่ควรจะเหมือนเดิมตลอดทั้งโค้ด
-
คุณสมบัติอื่นคือฟังก์ชัน reentrant ไม่ควรเรียกใช้ฟังก์ชัน non-reentrant อื่น ๆ
ตัวอย่าง
int x; int my_function() { return x * 10; } int my_second_function() { return my_function() * 20; }
ฟังก์ชันทั้งสองนี้ไม่ใช่การเรนเดอร์ อันแรกใช้ตัวแปรโกลบอลตัวเดียว ดังนั้นจึงไม่รีเรนท์แรนท์ อันที่ 2 กำลังเรียกฟังก์ชัน non-reentrant ฟังก์ชันเหล่านี้ไม่ใช่ฟังก์ชัน reentrant
ตัวอย่าง
int my_function(int x) { return x * 10; } int my_second_function(int x) { return my_function(x) * 20; }
ตอนนี้ฟังก์ชันทั้งสองนี้เป็นฟังก์ชันที่กลับเข้ามาใหม่