📜  门| Sudo GATE 2021 测验 |问题 6

📅  最后修改于: 2021-09-25 07:16:12             🧑  作者: Mango

如果程序可以在执行过程中被中断,然后在之前的调用完成执行之前再次安全地调用(“重新进入”),则该程序被称为可重入的。中断可能是由内部操作(例如跳转或调用)引起的,也可能是由外部操作(例如中断或信号)引起的。一旦重新输入的调用完成,先前的调用将恢复正确执行。

以下哪个程序是可重入的?

注意 –此问题是多选题 (MSQ)。
(一种)

int t;

void swap(int *x, int *y)
{
    t = *x;
    *x = *y;

    // hardware interrupt might invoke isr() here!
    *y = t;
}

void isr()
{
    int x = 1, y = 2;
    swap(&x, &y);
}

(二)

int t;

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

    s = t; // save global variable
    t = *x;
    *x = *y;

    // hardware interrupt might invoke isr() here!
    *y = t;
    t = s; // restore global variable
}

void isr()
{
    int x = 1, y = 2;
    swap(&x, &y);
}

(C)

void swap(int *x, int *y)
{
    int t = *x;
    *x = *y;

    // hardware interrupt might invoke isr() here!
    *y = t;
}

void isr()
{
    int x = 1, y = 2;
    swap(&x, &y);
}

(D)这些都不是答案: (B) (C)
说明:无法重入的 swap()函数的选项 (A) 中给出的代码。

选项(B)和(C)是正确的。
这个问题的测验
如果您发现上面的帖子有任何错误,请在下面评论