Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Closed

Closed (Level 1) - Jetzt verbinden

06.02.2010 um 14:30 Uhr, 4548 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 ..
Ähnliche Inhalte
C und C++
C++ Problem mit Pointer
Frage von Maik87C und C++5 Kommentare

Hallo zusammen, C ist lange bei mir her - die Pointer ebenfalls. Dennoch versuche ich mich gerade wieder einzuarbeiten ...

C und C++
Problem mit C basiertem Text Spiel
Frage von TheBest4everC und C++2 Kommentare

Hi, Ich habe mir als C Anfänger ein textspiel geschrieben und bin dann auf ein Problem gestoßen: ich hab ...

C und C++
C Sharp SQL Abfrage Problem
Frage von 115122C und C++3 Kommentare

Hallo, ich möchte in C# eine Verbindung zu einer DB/Tabelle herstellen, eine Abfrage starten und die Ergebnismenge darstellen. Das ...

C und C++
Von C auf C++ umsteigen
Frage von jangruC und C++3 Kommentare

Sehr geehrte Community, wie Sie meiner Überschrift bereits entnehmen konnten, habe ich vor von C auf C umzusteigen. Da ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 6 StundenHumor (lol)1 Kommentar

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 18 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 19 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 22 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...