我和我的朋友们在网上偶然看到了这个示例代码,我们正在争论是否实现了关键部分。

那么,我们在这里还是不实现临界段?

int flagga[2];

void task0(void){
 while(1){
 /* some code */
 flagga[0]=true;
 while(flagga[1]==true) /*do nothing*/;
 /* critical sektion */
 flagga[0]=false;
 }
}

void task1(void){
 while(1){
 /* some code */
 flagga[1]=true;
 while(flagga[0]==true) /*do nothing*/;
 /* critical section */
 flagga[1]=false;
 }
}

void main(void){
 flagga[0]=flagga[1]=false;
 startThread(task0);
 startThread(task1);
 while(1);
}

最佳答案

它可能会挨饿:如果两个任务都没有在另一个while设置为true之前到达内部flagga(如果您在每个任务中的语句之间交替使用,就会发生这种情况),这两个任务都会在其内部卡住环。

09-27 08:11