k***s 发帖数: 277 | 1 记得以前的一本operating system的教材 中有这个的C代码,
没有用到任何硬件上的特殊指令,完全的C程序,但是可以很好的
完成只允许一个调用者进入,而另一个(几个)会失败返回。
现在到处找不到这个程序了,请问有没有人知道?
多谢 | t****t 发帖数: 6806 | 2 这个不可能的啦, 现在的硬件和编译器比原来复杂好多了, 不靠特殊支持已经做不到了.
【在 k***s 的大作中提到】 : 记得以前的一本operating system的教材 中有这个的C代码, : 没有用到任何硬件上的特殊指令,完全的C程序,但是可以很好的 : 完成只允许一个调用者进入,而另一个(几个)会失败返回。 : 现在到处找不到这个程序了,请问有没有人知道? : 多谢
| k***s 发帖数: 277 | 3 这个算法在现在没有什么实际的价值,只是在理论上有意义
在Operating System Concepts上查到了,设计的很巧妙。
// i, j are two processes try to get into critical section
do {
flag[i] = true;
turn = j;
while (flag[j] && turn==j);
// critical section
flag[i] = false;
} while (1);
了.
【在 t****t 的大作中提到】 : 这个不可能的啦, 现在的硬件和编译器比原来复杂好多了, 不靠特殊支持已经做不到了.
| t****t 发帖数: 6806 | 4 这个在现在的硬件上不会有用的. 你在C语言里写的执行顺序, 内存读写, CPU在执行的
时候全都不给你保证. 执行的顺序可以打乱, 内存读写可以跳过或者多出, 总之CPU只
保证单线程语义正确, 不加lock或者fence的话在多线程环境下几乎一定是错的.
【在 k***s 的大作中提到】 : 这个算法在现在没有什么实际的价值,只是在理论上有意义 : 在Operating System Concepts上查到了,设计的很巧妙。 : // i, j are two processes try to get into critical section : do { : flag[i] = true; : turn = j; : while (flag[j] && turn==j); : // critical section : flag[i] = false; : } while (1);
| e****d 发帖数: 895 | 5 Without proper atomic operations, locking and memory model,
this implementation is not practical.
Even the following example is not thread-safe,
thread 1:
bool a;
a = true;
if (a)
{
do_something();
}
thread 2:
bool b
b = false;
if (!b)
{
do_something2();
}
【在 k***s 的大作中提到】 : 这个算法在现在没有什么实际的价值,只是在理论上有意义 : 在Operating System Concepts上查到了,设计的很巧妙。 : // i, j are two processes try to get into critical section : do { : flag[i] = true; : turn = j; : while (flag[j] && turn==j); : // critical section : flag[i] = false; : } while (1);
|
|