当前位置: 技术问答>linux和unix
麻烦高人帮我分析下下面C程序是否会引起死锁!
来源: 互联网 发布时间:2016-07-28
本文导语: 题目:下面的代码是按照TestAndSet来实现的信号量,试分析他是否会引起死锁? int tas(int *lock)//这个函数是用来“忙等待”的 { int retval; retval = *lock; *lock = 1; return retval; } void down(semaphore_t *s) { f...
题目:下面的代码是按照TestAndSet来实现的信号量,试分析他是否会引起死锁?
int tas(int *lock)//这个函数是用来“忙等待”的
{
int retval;
retval = *lock;
*lock = 1;
return retval;
}
void down(semaphore_t *s)
{
for(;;)
{
while(tas(&lock));
if(*s > 0)
{
*(s)--;
break;
}
lock = 0;
}
lock = 0;
}
void up(semaphore_t *s)
{
while(tas(&lock));
*(s)++;
lock = 0;
}
int tas(int *lock)//这个函数是用来“忙等待”的
{
int retval;
retval = *lock;
*lock = 1;
return retval;
}
void down(semaphore_t *s)
{
for(;;)
{
while(tas(&lock));
if(*s > 0)
{
*(s)--;
break;
}
lock = 0;
}
lock = 0;
}
void up(semaphore_t *s)
{
while(tas(&lock));
*(s)++;
lock = 0;
}
|
while(tas(&lock));
操作系统应该学过了,忙等待会引起dead lock的,
原因在与一个进程在执行上述语句时, 在忙等,其他进程可能没有调度的机会,
更重要的是这里的tas不是原子操作.