给出一些指令,实现一个简单的自旋锁

时间:2015-05-14 17:23:59

标签: c operating-system

例如,如果有以下代码,那么一些如果设置则清除并以下列方式执行原子。这是简单的C代码。

int IfSetThenClear(int * ptr)
{
    int actual = *ptr;
    if(actual== 1)
    *ptr = 0;
    return actual;
}

现在我想使用这个给定的指令实现一个自旋锁 我将如何实现它?我不是在寻找任何工作代码 我只是想学习所以即使是可以解释的pesudo代码也会有很多帮助 我是OS的新手。

1 个答案:

答案 0 :(得分:1)

大概是零意味着锁定。

您可以执行以下操作:

int spinlock_flag; // shared flag

while (IfSetThenClear(&spinlock_flag) == 1)) {} // returns 1 if it was locked and is now 0 which i means i hold the lock.

do_something();

spinlock_flag = 1; // unlocked.

你知道你需要使用原子比较和交换操作才能在现实生活中有意义吗?

这可能会有所帮助 - 几个月前,当我在玩具操作系统上工作时,我发布了一些代码。发布的代码有效,并且有一些很好的回复。

https://codereview.stackexchange.com/questions/84148/spinlock-for-c-kernel-with-x86-asm