Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ฟังก์ชัน reentrant ใน C/C++ คืออะไร


ที่นี่เราจะดูว่าฟังก์ชัน 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;
}

ตอนนี้ฟังก์ชันทั้งสองนี้เป็นฟังก์ชันที่กลับเข้ามาใหม่