给定一些指令实现一个简单的自旋锁
Implementing a simple spin lock given some instruction
例如,如果有以下代码,如果设置了则清除并按以下方式执行原子操作。这是简单的 C 代码。
int IfSetThenClear(int * ptr)
{
int actual = *ptr;
if(actual== 1)
*ptr = 0;
return actual;
}
现在我想用这个给定的指令实现自旋锁
我将如何实现它?我不是在寻找任何工作代码
我只是想学习,所以即使是可以解释的伪代码也会有很大帮助
我是 OS.
的新手
大概是零表示锁定。
你会这样做:
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
例如,如果有以下代码,如果设置了则清除并按以下方式执行原子操作。这是简单的 C 代码。
int IfSetThenClear(int * ptr)
{
int actual = *ptr;
if(actual== 1)
*ptr = 0;
return actual;
}
现在我想用这个给定的指令实现自旋锁 我将如何实现它?我不是在寻找任何工作代码 我只是想学习,所以即使是可以解释的伪代码也会有很大帮助 我是 OS.
的新手大概是零表示锁定。
你会这样做:
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