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, 4656 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++
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 ...

C und C++
Fehlendes verständiss von C und C++
Frage von zelamediaC und C++8 Kommentare

Hallo, ich wollte mich in nächster zeit mit C auseinandersetzen habe aber vorher eine frage die mich schon immer ...

C und C++
Förderband C++
gelöst Frage von BudSpenserC und C++3 Kommentare

Hallo Ich bräuchte etwas hilfe Ich programmiere derzeit für mich ein Spiel, nur das wichtigste fehlt mir, das Förderband ...

C und C++
C funktioniert und C++ nicht, warum?
gelöst Frage von MigmannC und C++5 Kommentare

Hallo Leute, ich möchte Assembler, C, und C lernen. Mein Betriebsystem ist Windows 7. Natürlich kann ich noch nicht ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 52 MinutenDatenschutz

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 3 StundenSicherheit

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 21 StundenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 1 TagWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
Server-Hardware
Kompatibilität Tray für HP Proliant DL385 G10 vs. G8, G9
Frage von chris123Server-Hardware19 Kommentare

Hallo, weiß einer der hier anwesenden, ob die Trays für 2,5 " HDDs zwischen einem DL 385 G10 und ...

LAN, WAN, Wireless
Glasfaserkabel verlegen und Anschlüsse setzen
Frage von LLL0rdLAN, WAN, Wireless18 Kommentare

Hallo Leute, ich muss demnächst ein Netzwerkkabel auf einer Länge von ca. 70 Metern verlegen. Das Netzwerkkabel soll dabei ...

E-Mail
Wie funktionieren DNS Blacklisten?
gelöst Frage von WinLiCLIE-Mail12 Kommentare

Ich frage mich schon seit längerem, woher genau die Blacklisten für die Mailserver die Domains und Ips kennen die ...

Server-Hardware
Server Hardwareempfehlung für Projekt
gelöst Frage von heax22Server-Hardware12 Kommentare

Hallo zusammen, ich bin auf der Suche nach einer geeigneten Server Plattform um unter Hyper-V einen virtuellen Server 2016 ...