When the main thread creates a peer thread in line 13

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: differences in the 582 CHAPTER 11. CONCURRENT PROGRAMMING WITH THREADS code/threads/goodcnt.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include "csapp.h" #define NITERS 10000000 void *count(void *arg); /* shared variables */ unsigned int cnt; /* counter */ sem_t sem; /* semaphore */ int main() { pthread_t tid1, tid2; Sem_init(&sem, 0, 1); Pthread_create(&tid1, NULL, count, NULL); Pthread_create(&tid2, NULL, count, NULL); Pthread_join(tid1, NULL); Pthread_join(tid2, NULL); if (cnt != (unsigned)NITERS*2) printf("BOOM! cnt=%d\n", cnt); else printf("OK cnt=%d\n", cnt); exit(0); } /* thread routine */ void *count(void *arg) { int i; for (i=0; i<NITERS; i++) { P(&sem); cnt++; V(&sem); } return NULL; } code/threads/goodcnt.c Figure 11.17: goodcnt.c: A properly synchronized version of badcnt.c. 11.5. SYNCHRONIZING THREADS WITH MUTEX AND CONDITION VARIABLES 583 producer t...
View Full Document

Ask a homework question - tutors are online