开张hoho,贴个小程序

原创 2005年06月01日 12:34:00

以下代码参考《现代操作系统》英文第2版P127哲学家就餐问题例子程序,在windowsXP下使用VC6.0进行了实现,希望大家多提改正意见:

#include "windows.h"

#include <stdio.h>
#include <stdlib.h>

#define PHILO_NUM 5     /* how many philosophers */
#define THINKING 0
#define HUNGRY  1
#define EATING  2
#define DELAY_THINK 500
#define DELAY_EAT 400
#define STRING_LEN 7
#define LEFT(i)  (i+PHILO_NUM-1)%PHILO_NUM
#define RIGHT(i) (i+1)%PHILO_NUM

typedef struct
{
 int i;
}INTEGER;

/* global variables */
int state[PHILO_NUM];
HANDLE h_mutex;       /* Semaphore for exclusion */
HANDLE h_s[PHILO_NUM];     /* Semaphore for philosophers */

/* definition */
void philosopher(void* id)
{

 DWORD wait_for_mutex;
 DWORD wait_for_self;
 int nid;

 nid = ((INTEGER*) id)->i;
 while(TRUE)
 {
  printf("Philosopher%d is thinking.../n", nid);
  Sleep(DELAY_THINK);
  /* He wants to eat. */
  wait_for_mutex = WaitForSingleObject(h_mutex, -1);
  state[nid] = HUNGRY;
  if (state[nid] == HUNGRY && state[LEFT(nid)] != EATING && state[RIGHT(nid)] != EATING)
  {
   state[nid] = EATING;
   ReleaseSemaphore(h_s[nid], 1, NULL);
  }
  ReleaseMutex(h_mutex);
  wait_for_self = WaitForSingleObject(h_s[nid], -1);
  
  printf("Philosopher%d is eating.../n", nid);
  Sleep(DELAY_EAT);
  /* He finishes eating. */
  wait_for_mutex = WaitForSingleObject(h_mutex, -1);
  state[nid] = THINKING;
  if (state[LEFT(nid)] == HUNGRY && state[LEFT(LEFT(nid))] != EATING && state[RIGHT(LEFT(nid))] != EATING)
  {
   state[LEFT(nid)] = EATING;
   ReleaseSemaphore(h_s[LEFT(nid)], 1, NULL);
  }
  if (state[RIGHT(nid)] == HUNGRY && state[LEFT(RIGHT(nid))] != EATING && state[RIGHT(RIGHT(nid))] != EATING)
  {
   state[RIGHT(nid)] = EATING;
   ReleaseSemaphore(h_s[RIGHT(nid)], 1, NULL);
  }
  ReleaseMutex(h_mutex);
 }
}


int main(void)
{
 DWORD thread_ID;
 DWORD wait_for_all;
 HANDLE h_thread[PHILO_NUM];
 INTEGER intNums[PHILO_NUM];

 int i;
 char str_name[STRING_LEN];

 /* initializing... */
 h_mutex = CreateMutex(NULL, FALSE, "mutex_for_state_array");
 h_mutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "mutex_for_state_array");

 memset(str_name, 0, STRING_LEN * sizeof(char));
 for (i = 0; i < PHILO_NUM; i++)
 {
  sprintf(str_name, "philo%d", i);
  h_s[i] = CreateSemaphore(NULL, 0, 1, str_name);
  h_s[i] = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, str_name);
 }

 for (i = 0; i < PHILO_NUM; i++)
 {
  intNums[i].i = i;
  h_thread[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(philosopher), &intNums[i], 0, &thread_ID);
 }

 wait_for_all = WaitForMultipleObjects(PHILO_NUM, h_thread, TRUE, -1);
 return 0;
}

庆祝我的blog开张,hoho

my first article^_^ Congratulations!
  • icegrape
  • icegrape
  • 2006年06月08日 19:36
  • 388

今天新店开张真是然我兴奋了一阵子

一个程序员的陶宝生涯开始了,今天新店开张真是然我兴奋了一阵子。以后我每天至少要看一个“两星”以上的店铺。今天,开的是“仙人掌”,商品不多只有24件,介绍不够严肃,可能会影响客户对它的信心,但是这就是它...
  • u013641336
  • u013641336
  • 2014年08月06日 17:19
  • 523

今天开张了,欢迎大家访问我的博客!

 
  • grantw
  • grantw
  • 2007年08月24日 17:04
  • 269

祝贺我的博客新开张!

我的CSDN博客开张了!自己发贴祝贺一下!:)
  • scjpsz1860
  • scjpsz1860
  • 2006年01月27日 12:05
  • 446

淘宝新店开张没人气没流量没生意怎么办

淘宝新店才开一定要多学习,现在网络骗子很多,最好找个师傅带带这样会少走很多弯路的,...
  • tang1269734
  • tang1269734
  • 2017年06月16日 22:16
  • 418

hoho :)

  • Awinye
  • Awinye
  • 2005年11月09日 19:20
  • 897

hoho

hohohoho
  • wowjing
  • wowjing
  • 2011年09月12日 11:38
  • 90

贴个小笑话换个心情

一陕西男子下江南,到一酒店用餐:男:馍馍多少钱?服务员:摸摸五十。男:下面呢?服务员:一百。男愤然:水饺呢?服务员:睡觉二百。男:一碗二百?服务员:一晚四百!...
  • huhu2k
  • huhu2k
  • 2017年05月03日 18:11
  • 89

HoHo~

我一共有四句话要说。包括上面一句和这句。这是我在Blog上写的第三句话。我的话说完了 。...
  • linsoo
  • linsoo
  • 2007年04月19日 17:10
  • 359

hoho……

learning……
  • lmjairou
  • lmjairou
  • 2010年10月08日 17:30
  • 105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开张hoho,贴个小程序
举报原因:
原因补充:

(最多只允许输入30个字)