临界区问题的算法尝试与解决方案
1. 首次尝试
首次尝试使用一个全局变量 threadNumber 来决定哪个线程可以进入临界区。以下是示例代码:
int threadNumber = 0;
void ThreadZero()
{
while (TRUE) do {
while (threadNumber == 1) do {} //spin-wait
CriticalRegionZero;
threadNumber = 1;
OtherStuffZero;
}
}
void ThreadOne()
{
while (TRUE) do {
while (threadNumber == 0) do {} //spin-wait
CriticalRegionOne;
threadNumber = 0;
OtherStuffOne;
}
}
执行流程
假设单核心有两个线程,执行流程如下:
1. T1 到达 while 循环。
2. 由于 threadNumber == 0 ,T1 等待。
3. T0 到达 while 循环。
4. 由于 threadNumber == 0 ,T0 继续执行。
5. T0 进入临界区。
6. T0 退出临界区并设置 threadNumber = 1
超级会员免费看
订阅专栏 解锁全文
173万+

被折叠的 条评论
为什么被折叠?



