e*******e 发帖数: 32 | 1 看到个题目:
implement a test-and-set: check if a register is 0 or not. If it is 0,
set it to 1, and return 0
请问应该从何下手?谢谢 |
c*****g 发帖数: 119 | 2 int TestAndSet(int* register)
{
int v;
v = Swap(register, 1);
return v!=0;
}
Swap() should be atomic.
【在 e*******e 的大作中提到】 : 看到个题目: : implement a test-and-set: check if a register is 0 or not. If it is 0, : set it to 1, and return 0 : 请问应该从何下手?谢谢
|
k****f 发帖数: 3794 | 3 要控制reg,只能上汇编了
有些reg你读不到的,也没法改的
【在 e*******e 的大作中提到】 : 看到个题目: : implement a test-and-set: check if a register is 0 or not. If it is 0, : set it to 1, and return 0 : 请问应该从何下手?谢谢
|
e*******e 发帖数: 32 | 4 register是keyword,在这里怎么能做Input variable呢?
【在 c*****g 的大作中提到】 : int TestAndSet(int* register) : { : int v; : v = Swap(register, 1); : return v!=0; : } : Swap() should be atomic.
|
c*****g 发帖数: 119 | 5 com'n, it's pseudo-code
【在 e*******e 的大作中提到】 : register是keyword,在这里怎么能做Input variable呢?
|
e*******e 发帖数: 32 | 6 那用register跟普通int变量有什么区别呢?
int TestAndSet(int* register)
{
int v;
v = Swap(register, 1);
return v!=0;
}
Swap() should be atomic.
【在 c*****g 的大作中提到】 : int TestAndSet(int* register) : { : int v; : v = Swap(register, 1); : return v!=0; : } : Swap() should be atomic.
|
m*****e 发帖数: 4193 | 7 You need to learn assembly. This is highly arch-dependent. But usually there
is one instruction or prefix for exactly this purpose.
【在 e*******e 的大作中提到】 : 看到个题目: : implement a test-and-set: check if a register is 0 or not. If it is 0, : set it to 1, and return 0 : 请问应该从何下手?谢谢
|
m***t 发帖数: 254 | 8 test and set is basic for thread synchronization. but yes, the underlying
implementation is hardware dependent. register variable is just a way of
telling compiler try to put this variable into register, compiler does not
guaranttee to honor such request. |
j****r 发帖数: 28 | 9 Pseudo code:
int register;
int testandset(){
int ret = register;
register = 1;
return ret;
}
int function(){
while( testandset() );
...
}
Actually, testandset is a hardware instruction which is used to implement
synchronous primitives. So it must be atomic.
【在 e*******e 的大作中提到】 : 看到个题目: : implement a test-and-set: check if a register is 0 or not. If it is 0, : set it to 1, and return 0 : 请问应该从何下手?谢谢
|
c********x 发帖数: 84 | 10
asm
{
AX XOR 1;
}
that is no brainer.
【在 e*******e 的大作中提到】 : 看到个题目: : implement a test-and-set: check if a register is 0 or not. If it is 0, : set it to 1, and return 0 : 请问应该从何下手?谢谢
|