周二晚才知道第四章小作业还有一道难度及工作量不亚于一个大作业的编程题..晚上找了一些资料,周三肝了一天算是赶完了这突如其来的ddl...
银行家算法是一种经典的死锁问题,下面是ppt里对银行家算法的描述。
查阅网上资料时,发现对于算法的代码有不少,但基于多线程的linux编程实现却很少,偶然发现了班上一大佬的文章,参考了他的思路(linux多线程模拟银行家算法
),结合了其他的一些资料,算是在ddl之前水完了这个作业...
这里记录一下一些细节和遇到的一些问题,以便日后回顾...(再次对上边的大佬进行无声的感谢..)
先贴代码为敬。
#include
#include
#include
#include
#include
#define true 1
#define false 0
#define MAXTN 10
#define MAXSRC 50
typedef int bool;
int thnum; //线程数目
int res; //资源种类数
int leftnum; //结束的线程数
int Available[MAXSRC]; //Available[j]:系统中j类资源空闲个数
int Max[MAXTN][MAXSRC]; //Max[i][j]:线程i对j类资源的最大需求量
int Allocation[MAXTN][MAXSRC]; //Allocation[i][j]:线程i已分配j类资源的数量
int Need[MAXTN][MAXSRC]; //Need[i][j]:线程i还需要j类资源的数量 Need=Max-Allocation
int Work[MAXTN]; //工作向量
bool visited[MAXTN]; //线程是否被访问过
bool Finish[MAXTN]; //线程是否已结束
int Safeseries[MAXTN]; //安全序列
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//初始化互斥锁
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;//初始化条件变量
void init