关键部分示例 - 它是否有效?

时间:2014-03-24 14:12:07

标签: c operating-system critical-section

我和我的朋友在网上看到了这个示例代码,我们正在争论它是否实现了一个关键部分。我们的意见来回反复,所以我们考虑过请求stackoverflow。

那么,我们是否在这里实施一个关键部分?

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); 
} 

1 个答案:

答案 0 :(得分:1)

它可能遭受饥饿:如果任何一个任务都没有到达内部while之前另一个已将其flagga设置为true(如果你在每个任务中的语句之间粘连交替,则会发生这种情况)将陷入其内在的循环。