Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

SourceCode für Dining Philosophers Problem in C

Frage Entwicklung C und C++

Mitglied: Closed

Closed (Level 1) - Jetzt verbinden

06.02.2010 um 14:30 Uhr, 4440 Aufrufe, 7 Kommentare

Hallo,

benötige SourceCode in C (nicht C++, Java oder sonst was ), der das Dining Philosophers Problem implementiert hat. Kann im Web nur Code für C++, Java oder sonst was finden. Brauche es aber dringend für eine Evaluierung in C und ein Umschreiben wäre die letzte Lösung. Das dauert bei meinen C-Kenntnissen zu lange

Vielen Dank
Mitglied: H41mSh1C0R
06.02.2010 um 14:43 Uhr
also ich brauche dringend eine Implementation eines USB Treibers inkl. Firmwarepaket zur Evaluierung =). Aber bitte dringend. xD xD Dauert bei meinen C-Kenntnissen auch zulange. xD

Aber glaube mir gibt das keiner, also schalte ich mal *Brain.exe* ein und schreibe mir bestehende Pakete um und stelle dann meine Fragen wenn ich wo nicht weiterkomme aber schon Ansätze vorweisen kann. xD
Bitte warten ..
Mitglied: Closed
06.02.2010 um 15:28 Uhr
sorry, aber blöd rumflamen kann man sich auch sparen. ohne witz, solche posts bringen rein gar nix und nerven einfach nur.
Bitte warten ..
Mitglied: H41mSh1C0R
06.02.2010 um 16:10 Uhr
dito dito dito

aber Bettelposts a la "bitte macht meine Hausaufgaben" ebenso. xD
Bitte warten ..
Mitglied: Closed
06.02.2010 um 17:56 Uhr
Das ist doch kein Bettelpost und mit Hausaufgaben hat das wenig zu tun... dafür bin ich dann mittlerweile doch zu alt ;)

Ein Forum ist dafür da, dass man Usern hilft. Es ist ja nicht so, dass ich keine Anstrengungen in die Suche investiert habe. Und wenn es jemanden gibt, der das gleiche Problem schonmal gehabt hat, dann erspart man sich mit einem einfachen Post in einem Forum einfach eine Menge Arbeit.

Ich sehe eh, wenn nichts bei rum kommt und ich keine Antworten erhalte. Dann wird mir nichts anderes übrig bleiben, als es selbst zu coden, allerdings sollte der Versuch nicht unter Verachtung gestellt werden.

Stelle meinen Code auch immer wieder gerne in Foren rein und denke, dass dies den meisten Usern weiterhilft. Dabei verfolge ich grundsätzlich den Gedanken des Webs, dass man eine große Community ist, die einem weiterhilft, auch wenn man mal eine nicht allzu herausfordernde Frage stellt...
Bitte warten ..
Mitglied: Closed
06.02.2010 um 18:35 Uhr
Sodalle,

für alle die dasselbe Problem haben, hier nun die Lösung:

1. pthread.h, sched.h und semaphore.h müssen von einer Quelle downgeloaded werden
2. Downloaden von pthreadVC1.lib und und pthredVC1.dll und in Windows einbinden
3. Source Code:

01.
//Quelle: http://people.eecs.ku.edu/~mjantz/678labs/lab08/lab08.tar.gz 
02.
//Authoren:  Vergleiche (Source von Quelle wurde umgeschrieben) Michael Jantz und Prasad Kulkarni  
03.
#include <stdio.h> 
04.
#include "C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\DiningPhilosophers\DiningPhilosophers\pthread.h" 
05.
#include "pthread.h" 
06.
#include <windows.h> 
07.
//#include <unistd.h> 
08.
#include <math.h> 
09.
#include <string.h> 
10.
 
11.
#define NUM_PHILS 5 
12.
#define MAX_BUF 256 
13.
#define NUM_CHOPS NUM_PHILS 
14.
 
15.
typedef struct { 
16.
  int can_grab_left; 
17.
  int can_grab_right; 
18.
  pthread_t thread; 
19.
  pthread_cond_t can_eat;  
20.
  int prog; 
21.
  int prog_total; 
22.
  int id; 
23.
} philosopher; 
24.
 
25.
static pthread_mutex_t chopstick[NUM_CHOPS]; 
26.
static pthread_mutex_t waiter; 
27.
static philosopher diners[NUM_PHILS]; 
28.
static int stop=0; 
29.
 
30.
/* 
31.
 * Helper functions for grabbing chopsticks, referencing neighbors 
32.
 */ 
33.
philosopher *left_phil (philosopher *p) 
34.
35.
  return &diners[(p->id == 0 ? NUM_PHILS-1 : (p->id)-1)]; 
36.
37.
 
38.
philosopher *right_phil (philosopher *p) 
39.
40.
  return &diners[(p->id == NUM_PHILS ? 0 : (p->id)+1)]; 
41.
42.
 
43.
pthread_mutex_t *left_chop (philosopher *p) 
44.
45.
  return &chopstick[(p->id == 0 ? NUM_CHOPS-1 : (p->id)-1)]; 
46.
47.
 
48.
pthread_mutex_t *right_chop (philosopher *p) 
49.
50.
  return &chopstick[p->id]; 
51.
52.
 
53.
/* 
54.
 * Philosopher code 
55.
 */ 
56.
static void *dp_thread(void *arg) 
57.
58.
      int iter=0, id = (int)arg; 
59.
  int think_rnd, eat_rnd, i; 
60.
  philosopher *me; 
61.
 
62.
  me = (philosopher *) arg; 
63.
 
64.
      while (!stop) { 
65.
    think_rnd = (rand() % 10000); 
66.
    eat_rnd = (rand() % 10000); 
67.
 
68.
            /* 
69.
             * Think for some random time 
70.
             */          
71.
            for (i = 0; i < think_rnd; i++){} 
72.
 
73.
    /* 
74.
     * Grab both chopsticks 
75.
     */ 
76.
    pthread_mutex_lock(left_chop(me)); 
77.
    pthread_mutex_lock(right_chop(me)); 
78.
 
79.
    /* 
80.
     * Eat for some random time 
81.
     */ 
82.
    for (i = 0; i < eat_rnd; i++){} 
83.
 
84.
    /* 
85.
     * Release both chopsticks 
86.
     */ 
87.
    pthread_mutex_unlock(left_chop(me)); 
88.
    pthread_mutex_unlock(right_chop(me)); 
89.
 
90.
    /* Update my progress */ 
91.
    me->prog++; 
92.
    me->prog_total++; 
93.
94.
 
95.
  return NULL; 
96.
97.
 
98.
void init_diners() 
99.
100.
  int i; 
101.
      for (i = 0; i < NUM_PHILS; i++) { 
102.
    diners[i].can_grab_left = 1; 
103.
    diners[i].can_grab_right = 1; 
104.
    diners[i].prog = 0; 
105.
    diners[i].prog_total = 0; 
106.
    diners[i].id = i; 
107.
108.
 
109.
      for (i = 0; i < NUM_PHILS; i++) { 
110.
            pthread_create(&(diners[i].thread), NULL, dp_thread, &diners[i]); 
111.
112.
113.
 
114.
void print_progress() 
115.
116.
  int i,j; 
117.
  char buf[MAX_BUF]; 
118.
 
119.
  for (i = 0; i < NUM_PHILS;) { 
120.
    for (j = 0; j < 5; j++) { 
121.
      if (i == NUM_PHILS) { 
122.
        printf("\n"); 
123.
        break; 
124.
125.
      sprintf(buf, "p%d=%d/%d", i, diners[i].prog, 
126.
          diners[i].prog_total); 
127.
      if (strlen(buf) < 16) 
128.
        printf("%s\t\t", buf); 
129.
      else  
130.
        printf("%s\t", buf); 
131.
      i++; 
132.
133.
    if (i == NUM_PHILS) { 
134.
      printf("\n"); 
135.
      break; 
136.
137.
    printf("p%d=%d/%d\n", i, diners[i].prog, 
138.
        diners[i].prog_total);  
139.
    i++; 
140.
141.
 
142.
  printf("\n"); 
143.
144.
 
145.
int main(int argc, char **argv) 
146.
147.
      int i, deadlock, iter=0; 
148.
 
149.
  srand(time(NULL)); 
150.
 
151.
      for (i = 0; i < NUM_CHOPS; i++) 
152.
            pthread_mutex_init(&chopstick[i], NULL); 
153.
 
154.
  pthread_mutex_init(&waiter, NULL); 
155.
  init_diners(); 
156.
       
157.
      do { 
158.
    /* 
159.
     * Reset the philosophers eating progress to 0. If the philosopher makes 
160.
     * progress, the philosopher will increment it. 
161.
     */ 
162.
            for (i = 0; i < NUM_PHILS; i++) 
163.
                  diners[i].prog = 0; 
164.
 
165.
    /* 
166.
     * Let the philosophers do some thinking and eating 
167.
     */ 
168.
            Sleep(5); 
169.
 
170.
    /* 
171.
     * Check for deadlock (i.e. none of the philosophers are making progress) 
172.
     */ 
173.
            deadlock = 1; 
174.
            for (i = 0; i < NUM_PHILS; i++) 
175.
                  if (diners[i].prog) 
176.
                        deadlock = 0; 
177.
 
178.
    /* 
179.
     * Print out the philosophers progress 
180.
     */ 
181.
    print_progress(); 
182.
      } while (!deadlock); 
183.
 
184.
      stop = 1; 
185.
  printf ("Reached deadlock\n"); 
186.
 
187.
  /* 
188.
   * Release all locks so philosophers can exit 
189.
   */ 
190.
      for (i = 0; i < NUM_CHOPS; i++) 
191.
            pthread_mutex_unlock(&chopstick[i]); 
192.
 
193.
  /* 
194.
   * Wait for philosophers to finish 
195.
   */ 
196.
      for (i = 0; i < NUM_PHILS; i++) 
197.
            pthread_join(diners[i].thread, NULL); 
198.
 
199.
      system("pause"); 
200.
 
201.
      return 0; 
202.
 
203.
 
204.
205.
 
Bitte warten ..
Mitglied: H41mSh1C0R
08.02.2010 um 08:49 Uhr
Sry, aber der Ausgangspost las sich aber so.
Das Alter eines Fragestellenden kann man bei recht frischen Accs und spärlicher Frage auch nicht einschätzen.
Der Satzanfang "Benötige das und das ..... Brauche es aber dringend" verbessert bei dem potentiell helfenden ebenfalls NICHT die Hilfbereitschaft, wirkt dem eher entgegen oder verursacht wie in meinem Fall eine flappsige Antwort.
Bitte warten ..
Mitglied: Closed
08.02.2010 um 19:03 Uhr
naja past ja eh, lassen wirs einfach so stehen.

PS: bin auch schon ein paar Jahre nun mit dabei ;)
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Exchange Server
Problem mit POP3-Abruf eines Exchange-2013-Postfachs

Frage von YotYot zum Thema Exchange Server ...

Multimedia & Zubehör
gelöst BENQ Beamer Fernbedingung Frequenz Problem (4)

Frage von xbast1x zum Thema Multimedia & Zubehör ...

Windows Server
Google Chrome Web Store Problem auf Terminal Farm

Frage von dakoerry zum Thema Windows Server ...

Multimedia & Zubehör
gelöst Problem: DVI zu VGA (8)

Frage von Protected zum Thema Multimedia & Zubehör ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...