【发布时间】:2017-08-15 09:32:19
【问题描述】:
我正在尝试了解我的操作系统课程中的死锁,并且无论我运行多少次,我制作的程序都不会死锁。代码是:
#include <stdio.h>
#include <pthread.h>
int resource1;
int resource2;
void *causeDeadlock1();
void *causeDeadlock2();
void wait(int r);
void signal(int r);
pthread_t tid[2];
int main()
{
resource1 = 1;
resource2 = 1;
pthread_create((&tid[0]), NULL, &causeDeadlock1, NULL);
pthread_create((&tid[1]), NULL, &causeDeadlock2, NULL);
return(0);
}
void wait(int r)
{
while(r<1);
printf("Done waiting\n");
r--;
}
void signal(int r)
{
r++;
}
void* causeDeadlock1()
{
wait(resource1);
wait(resource2);
printf("Thread 1 is running with both resources.\n");
signal(resource1);
signal(resource2);
printf("Thread 1 is done.\n");
}
void *causeDeadlock2()
{
wait(resource2);
wait(resource1);
printf("Thread 2 is running with both resources.\n");
signal(resource2);
signal(resource1);
printf("Thread 2 is done.\n");
}
当我运行它时,我通常看不到输出,但我也正常返回控制台。我认为原因是线程永远不会打印它们拥有资源或它们已经完成,因为它们永远卡在等待函数的 while 循环中。但是,如果是这样的话,程序不应该挂起而不是像什么都没发生一样让我回到控制台吗?
【问题讨论】:
-
函数:
wait()是一个众所周知的系统函数,通常用于延迟到某个子进程退出。通过系统函数名调用函数是一种非常糟糕的编程习惯