⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dining.c

📁 C++ SOCKET 类
💻 C
字号:
#include <thread.h>#include "philosopher.h"#include "dining.h"using namespace cpp_threads;dining::dining(int p_no){  p_fork = new Mutex[p_no];  p      = (Pthread **)malloc(sizeof(Pthread*)*(p_no+1));  for( philosophers=0;philosophers<p_no;philosophers++ )    p[philosophers] = new philosopher(philosophers,p_no,this);}dining::~dining(){  int n = 0;   // house keeping.  for( n=0;n<philosophers;n++ )    delete (p[n]);  delete p;  delete[] p_fork;  cout << "Diner closing." << endl;}int dining::nr(){  return philosophers;}bool dining::isLocked(int p_no){  bool locked;  if (locked = (p_fork[p_no].tryLock() == 0))    p_fork[p_no].unLock();  return !locked;}void dining::finished(int){  p_finish.post();}void dining::open(){  int n = 0;  for( n=0;n<philosophers;n++ )    ((philosopher *)p[n])->run();  for(n=0;n<philosophers;n++) {    p_finish.wait();    cout << philosophers - n -1 << " little indians, hanging on the wall" << endl;  }}bool dining::get_forks(int p_nr){  int lfork,rfork;  lfork = p_nr-1 >= 0 ? p_nr-1 : nr()-1;  rfork = lfork+1 >= nr() ? 0 : lfork+1;  if ( p_fork[lfork].tryLock() == 0 )    if ( p_fork[rfork].tryLock() == 0 )      return true;    else      p_fork[lfork].unLock();  return false;}void dining::put_forks(int p_nr){  int lfork,rfork;  lfork = p_nr-1 >= 0 ? p_nr-1 : nr()-1;  rfork = lfork+1 >= nr() ? 0 : lfork+1;  p_fork[lfork].unLock();  p_fork[rfork].unLock();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -