例如,如果有以下代码,那么一些如果设置则清除并以下列方式执行原子。这是简单的C代码。
int IfSetThenClear(int * ptr)
{
int actual = *ptr;
if(actual== 1)
*ptr = 0;
return actual;
}
现在我想使用这个给定的指令实现一个自旋锁 我将如何实现它?我不是在寻找任何工作代码 我只是想学习所以即使是可以解释的pesudo代码也会有很多帮助 我是OS的新手。
答案 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