Mời các bạn tham khảo code bai tuan Hiền Triết cùng ăn
Trang 1 trong tổng số 1 trang
Mời các bạn tham khảo code bai tuan Hiền Triết cùng ăn
Mời các bạn tham khảo code bai tuan Hiền Triết cùng ăn(tui sưu tầm từ các bạn khóa trước)
// Hientriet.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#define numPhilosophers 10
#define LEFT id
#define RIGHT (id+1)%numPhilosophers
HANDLE chopsticks[numPhilosophers];
char chState[numPhilosophers+1];
char phState[numPhilosophers+1];
void PhilosopherThread(int id){
while (1) {
// Suy nghi
Sleep(4000);
// Doi, do vay lay dua ben trai
phState[id]='d';
WaitForSingleObject(chopsticks[RIGHT], INFINITE);
chState[RIGHT]='0';
printf("- Chopsticks:\t%s\n Philosophers:\t%s\n\n", chState, phState);
Sleep(100);
// Roi lay dua ben phai
WaitForSingleObject(chopsticks[LEFT], INFINITE);
chState[RIGHT]='0';
// Bat dau an
phState[id]='a';
printf("- Chopsticks:\t%s\n Philosophers:\t%s\n\n", chState, phState);
Sleep(2000);
// An xong
phState[id]='-';
// Dat dua trai xuong
chState[RIGHT]='1';
ReleaseMutex(chopsticks[RIGHT]);
// Dat dua phai xuong
chState[LEFT]='1';
ReleaseMutex(chopsticks[LEFT]);
}
}
void main(){
HANDLE handles[numPhilosophers];
DWORD threadID; int i;
chState[numPhilosophers]='\0'; phState[numPhilosophers]='\0';
for (i=0; i<numPhilosophers; i++){
chState[i]='1'; phState[i]='-';
}
for (i=0; i<numPhilosophers; i++)
chopsticks[i]=CreateMutex(0, FALSE, 0);
printf("- Chopsticks:\t%s\n Philosophers:\t%s\n\n", chState, phState);
for (i=0; i<numPhilosophers; i++)
handles[i]=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)PhilosopherThread,
(void *) i, 0, &threadID);
WaitForMultipleObjects(numPhilosophers, handles, TRUE, INFINITE);
for (i=0; i<numPhilosophers; i++) CloseHandle(chopsticks[i]);
}
// Hientriet.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#define numPhilosophers 10
#define LEFT id
#define RIGHT (id+1)%numPhilosophers
HANDLE chopsticks[numPhilosophers];
char chState[numPhilosophers+1];
char phState[numPhilosophers+1];
void PhilosopherThread(int id){
while (1) {
// Suy nghi
Sleep(4000);
// Doi, do vay lay dua ben trai
phState[id]='d';
WaitForSingleObject(chopsticks[RIGHT], INFINITE);
chState[RIGHT]='0';
printf("- Chopsticks:\t%s\n Philosophers:\t%s\n\n", chState, phState);
Sleep(100);
// Roi lay dua ben phai
WaitForSingleObject(chopsticks[LEFT], INFINITE);
chState[RIGHT]='0';
// Bat dau an
phState[id]='a';
printf("- Chopsticks:\t%s\n Philosophers:\t%s\n\n", chState, phState);
Sleep(2000);
// An xong
phState[id]='-';
// Dat dua trai xuong
chState[RIGHT]='1';
ReleaseMutex(chopsticks[RIGHT]);
// Dat dua phai xuong
chState[LEFT]='1';
ReleaseMutex(chopsticks[LEFT]);
}
}
void main(){
HANDLE handles[numPhilosophers];
DWORD threadID; int i;
chState[numPhilosophers]='\0'; phState[numPhilosophers]='\0';
for (i=0; i<numPhilosophers; i++){
chState[i]='1'; phState[i]='-';
}
for (i=0; i<numPhilosophers; i++)
chopsticks[i]=CreateMutex(0, FALSE, 0);
printf("- Chopsticks:\t%s\n Philosophers:\t%s\n\n", chState, phState);
for (i=0; i<numPhilosophers; i++)
handles[i]=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)PhilosopherThread,
(void *) i, 0, &threadID);
WaitForMultipleObjects(numPhilosophers, handles, TRUE, INFINITE);
for (i=0; i<numPhilosophers; i++) CloseHandle(chopsticks[i]);
}
phuong.ntt-08h1010074- Tổng số bài gửi : 137
Join date : 05/05/2009
Similar topics
» bài toán hiền triết cùng ăn.
» Thảo luận Bài 2
» trang web tìm kiếm, tham khảo code
» Thảo luận Bài 7
» Mời các bạn tham khảo code thuật giải FCFS
» Thảo luận Bài 2
» trang web tìm kiếm, tham khảo code
» Thảo luận Bài 7
» Mời các bạn tham khảo code thuật giải FCFS
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết