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.

A.2 Barrieren <strong>mit</strong> POSIX-<strong>Threads</strong> 419<br />

20 /* Im Fehlerfall auch den Mutex wieder verwerfen */<br />

21 pthread_mutex_destroy( &barrier ->mutex );<br />

22 return( status );<br />

23 }<br />

24<br />

25 return( 0 );<br />

26 }<br />

27<br />

28 int barrier_destroy( barrier_t *barrier )<br />

29 {<br />

30 int status , status2;<br />

31<br />

32 status = pthread_mutex_lock( &barrier ->mutex );<br />

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

34 return( status );<br />

35<br />

36 /* Ist die Barriere gerade aktiv? */<br />

37 if( barrier ->counter != barrier ->threshold )<br />

38 {<br />

39 pthread_mutex_unlock( &barrier ->mutex );<br />

40 /* Falls ja, melden wir "BUSY" zurück */<br />

41 return( EBUSY );<br />

42 }<br />

43<br />

44 status = pthread_mutex_unlock( &barrier ->mutex );<br />

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

46 return( status );<br />

47<br />

48 /* Mutex <strong>und</strong> Bedingungsvariable verwerfen */<br />

49 status = pthread_mutex_destroy( &barrier ->mutex );<br />

50 status2 = pthread_cond_destroy( &barrier ->cv );<br />

51<br />

52 return( status != 0 ? status : status2 );<br />

53 }<br />

54<br />

55 int barrier_wait( barrier_t *barrier )<br />

56 {<br />

57 int status , cancel , tmp, cycle;<br />

58<br />

59 status = pthread_mutex_lock( &barrier ->mutex );<br />

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

61 return( status );<br />

62<br />

63 cycle = barrier ->cycle;<br />

64<br />

65 /* Sind schon genügend <strong>Threads</strong> eingetroffen? */<br />

66 if( --barrier ->counter == 0 )<br />

67 {<br />

68 /* Falls ja, neuer Barrierendurchlauf */

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!