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

📄 diner.c

📁 用c++包装好的线程库,直接拿来使用,提高效率.
💻 C
字号:
//// This is a philosopher demo, using process scoping.#include <thread.h>#include <iostream>#define MAX_PHILOSOPHERS          5using namespace std;using namespace cpp_threads;int main(){  Mutex*     p_fork;  Semaphore* sem;  bool fork_v = false;  int lfork, rfork, _nr, _forks = MAX_PHILOSOPHERS, _count;    Pthread::setProject( "/tmp/philosophy" );  sem    = new Semaphore(attributes::process_shared_e);  p_fork = new Mutex[MAX_PHILOSOPHERS](attributes::process_shared_e);  if ( (_nr = sem->post()) > MAX_PHILOSOPHERS ) {    sem->tryWait();    exit(0);  }  _count = _forks;  _nr -= 1;  lfork = _nr-1 >= 0 ? _nr-1 : _forks-1;  rfork = lfork+1 >= _forks ? 0 : lfork+1;  while(_count-- > 0) {    cout << "Philosopher " << _nr << " looking for " << lfork << ',' <<  rfork << endl;    while( fork_v == false ) {      if (p_fork[lfork].tryLock() == 0) {	if (p_fork[rfork].tryLock() == 0)	  fork_v = true;	else	  p_fork[lfork].unLock();      }    }    cout << "Philosopher " << _nr << " using (" << lfork << ',' << rfork << ")\n";    sleep(2);    fork_v = false;    cout << "Philosopher " << _nr << ": sleeping\n";    p_fork[lfork].unLock();    p_fork[rfork].unLock();    sleep(2);  }  cout << _nr << " has finished dining." << endl;  sem->tryWait();  return 0;}

⌨️ 快捷键说明

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