05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5<br />

6 #define MAX_NUMBERS 10<br />

7<br />

8 typedef struct intbuffer {<br />

9 int val[MAX_NUMBERS];<br />

10 int in, out;<br />

11 pthread_mutex_t mutex;<br />

12 } intbuffer_t;<br />

13<br />

14 intbuffer_t data;<br />

Beispiel 3.5. average-mutex.c<br />

3.2 Synchronisation 123<br />

15<br />

16 void error_exit( char *message , int status )<br />

17 {<br />

18 printf( "%s: %s\n", message , strerror( status ) );<br />

19 exit( 1 );<br />

20 }<br />

21<br />

22 void *avg( void *arg )<br />

23 {<br />

24 int sum = 0, num = 0, status;<br />

25<br />

26 for(;;) /* Endlosschleife */<br />

27 {<br />

28 /* exklusiven Zugriff auf data sicherstellen */<br />

29 status = pthread_mutex_lock( &data.mutex );<br />

30 if( status != 0 )<br />

31 error_exit( "pthread_mutex_lock()", status );<br />

32<br />

33 if( data.in != data.out ) /* liegt neuer Wert vor? */<br />

34 {<br />

35 /* Wert aufsummieren <strong>und</strong> Puffer weiterschalten */<br />

36 sum += data.val[data.out];<br />

37 data.out = ( data.out + 1 ) % MAX_NUMBERS;<br />

38<br />

39 num++; /* internen Zähler inkrementieren */<br />

40<br />

41 printf( "Durchschnitt der %d Werte: %lf\n", num,<br />

42 (double)sum / num );<br />

43 }<br />

44<br />

45 /* exklusiven Zugriff auf data freigeben */<br />

46 status = pthread_mutex_unlock( &data.mutex );<br />

47 if( status != 0 )

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!