CSE 460 Lab 6: Semaphores Highlights of this lab: 1. Definition of Semaphore 2. Why Semaphores? 3. Functions for Posix Semaphores sem_init sem_wait sem_post sem_getvalue sem_destroy 4. Lab Exercise 1....

1 answer below ยป
Working for full-time job and being an essential worker couldn't make it in time in deadlines. Just follow the instruction below turn in Code that asks for in pdf.


CSE 460 Lab 6: Semaphores Highlights of this lab: 1. Definition of Semaphore 2. Why Semaphores? 3. Functions for Posix Semaphores sem_init sem_wait sem_post sem_getvalue sem_destroy 4. Lab Exercise 1. Definition of Semaphore The original meaning of a semaphore was: "A visual signaling apparatus with flags, lights, or mechanically moving arms, as one used on a railroad." (from http://dictionary.reference.com) What do railroad tracks and computers have in common? Well, railroad semaphores were the inspiration of E. W. Dijkstra solution to the mutual exclusion problem in operating systems. "...consider a stretch of railroad in which there is a single track over which only one train at a time is allowed. Guarding this track is a semaphore. A train must wait before entering the single track until the semaphore is in a state that permits travel. When the train enters the track, the semaphore changes state to prevent other trains from entering the track. A train that is leaving this section of track must again change the state of the semaphore to allow another train to enter." (from Oracle Documentation: Programming with Synchronization Objects.) Railroad semaphores serve as a signal to indicate whether or not a single track has a train on it. Similarly, semaphores in operating systems serve as a signal to indicate whether or not a shared resource is currently being used. The following is a definition of the operating systems semaphores (from The Free On-line Dictionary of Computing, http://www.foldoc.org/, Editor Denis Howe): "[Semaphores are] the classic method for restricting access to shared resources (e.g. storage) in a multi-processing environment. They were invented by Dijkstra http://dictionary.reference.com/search?q=semaphore https://docs.oracle.com/cd/E19683-01/806-6867/6jfpgdcnj/index.html http://foldoc.org/semaphores and first used in T.H.E operating system. A semaphore is a protected variable (or abstract data type) which can only be accessed using the following operations: P(s) /* idea of the sem_wait */ Semaphore s; { while (s == 0) ; /* wait until s>0 */ s = s - 1; } V(s) /* idea of the sem_post */ Semaphore s; { s = s + 1; } Init(s, v) Semaphore s; int v; { s = v; } P and V stand for Dutch "Proberen", to test, and "Verhogen", to increment. The value of a semaphore is the number of units of the resource which are free (if there is only one resource a "binary semaphore" with values 0 or 1 is used). The P operation busy-waits (or maybe sleeps) until a resource is available whereupon it immediately claims one. V is the inverse, it simply makes a resource available again after the process has finished using it. Init is only used to initialise the semaphore before any requests are made. The P and V operations must be indivisible, i.e. no other process can access the semaphore during the their execution. To avoid busy-waiting, a semaphore may have an associated queue of processes (usually a FIFO). If a process does a P on a semaphore which is zero the process is added to the semaphore's queue. When another process increments the semaphore by doing a V and there are tasks on the queue, one is taken off and resumed. " Note: These operations must be performed as an atomic hardware instruction to prevent two processes from gaining control of the same semaphore. The ideas above are concepts, but only safe when performed through one hardware instruction. 2. Why Semaphores Read the following code badcnt.c, #include #include #include #include #define NITER 1000000 int cnt = 0; void * Count(void * a) { int i, tmp; for(i = 0; i < niter;="" i++)="" {="" tmp="cnt;" *="" copy="" the="" global="" cnt="" locally="" */="" tmp="tmp+1;" *="" increment="" the="" local="" copy="" */="" cnt="tmp;" *="" store="" the="" local="" value="" into="" the="" global="" cnt="" */="" }="" }="" int="" main(int="" argc,="" char="" *="" argv[])="" {="" pthread_t="" tid1,="" tid2;="" if(pthread_create(&tid1,="" null,="" count,="" null))="" {="" printf("\n="" error="" creating="" thread="" 1");="" exit(1);="" }="" if(pthread_create(&tid2,="" null,="" count,="" null))="" {="" printf("\n="" error="" creating="" thread="" 2");="" exit(1);="" }="" if(pthread_join(tid1,="" null))="" *="" wait="" for="" the="" thread="" 1="" to="" finish="" */="" {="" printf("\n="" error="" joining="" thread");="" exit(1);="" }="" if(pthread_join(tid2,="" null))="" *="" wait="" for="" the="" thread="" 2="" to="" finish="" */="" {="" printf("\n="" error="" joining="" thread");="" exit(1);="" }="" if="" (cnt="">< 2="" *="" niter)="" printf("\n="" boom!="" cnt="" is="" [%d],="" should="" be="" %d\n",="" cnt,="" 2*niter);="" else="" printf("\n="" ok!="" cnt="" is="" [%d]\n",="" cnt);="" pthread_exit(null);="" }="" compile="" it="" using="" gcc="" badcnt.c="" -o="" xbadcnt="" -lpthread="" run="" the="" executable="" file="" and="" observe="" the="" ouput.="" quite="" unexpected!="" since="" cnt="" starts="" at="" 0,="" and="" both="" threads="" increment="" it="" niter="" times,="" we="" should="" see="" cnt="" equal="" to="" 2*niter="" at="" the="" end="" of="" the="" program.="" what="" happens?="" threads="" can="" greatly="" simplify="" writing="" elegant="" and="" efficient="" programs.="" however,="" there="" are="" problems="" when="" multiple="" threads="" share="" a="" common="" address="" space,="" like="" the="" variable="" cnt="" in="" our="" earlier="" example.="" to="" understand="" what="" might="" happen,="" let="" us="" analyze="" this="" simple="" piece="" of="" code:="" thread="" 1="" thread="" 2="" a="data;" b="data;" a++;="" b++;="" data="a;" data="b;" now="" if="" this="" code="" is="" executed="" serially="" (for="" instance,="" thread="" 1="" first="" and="" then="" thread="" 2),="" there="" are="" no="" problems.="" however="" threads="" execute="" in="" an="" arbitrary="" order,="" so="" consider="" the="" following="" situation:="" thread="" 1="" thread="" 2="" data="" a="data;" ---="" 0="" a="a" +="" 1;="" ---="" 0="" ---="" b="data;" 0="" 0="" ---="" b="b" +="" 1;="" 0="" data="a;" 1="" ---="" 1="" ---="" data="b;" 1="" 1="" so="" data="" could="" end="" up="" 1="" or="" 2,="" and="" there="" is="" no="" way="" to="" know="" which="" value!="" it="" is="" completely="" non-="" deterministic!="" the="" solution="" to="" this="" is="" to="" provide="" functions="" that="" will="" block="" a="" thread="" if="" another="" thread="" is="" accessing="" data="" that="" it="" is="" using.="" pthreads="" may="" use="" semaphores="" to="" achieve="" this.="" 3.="" functions="" for="" posix="" semaphores="" all="" posix="" semaphore="" functions="" and="" types="" are="" prototyped="" or="" defined="" in="" semaphore.h.="" to="" define="" a="" semaphore="" object,="" use="" #include=""> sem_t sem_name; sem_init() sem_init initializes a semaphore. int sem_init(sem_t *sem, int pshared, unsigned int value); Notes: sem points to a semaphore object to initialize pshared is a flag indicating whether or not the semaphore should be shared with fork()ed processes. Linux Threads does not currently support shared semaphores value is an initial value to set the semaphore to Example of use: sem_init(&sem_name, 0, 10); sem_wait() To wait on a semaphore, use sem_wait: int sem_wait(sem_t *sem); If the value of the semaphore is negative, the calling process blocks; one of the blocked processes wakes up when another process calls sem_post. Example of use: sem_wait(&sem_name); sem_post() To increment the value of a semaphore, use sem_post: int sem_post(sem_t *sem); It increments the value of the semaphore and wakes up a blocked process waiting on the semaphore, if any. Example of use: sem_post(&sem_name); sem_getvalue() To find out the value of a semaphore, use sem_getvalue: int sem_getvalue(sem_t *sem, int *valp); gets the current value of sem and places it in the location pointed to by valp. Example of use: int value; sem_getvalue(&sem_name, &value); printf("The value of the semaphors is %d\n", value); sem_destroy() To destroy a semaphore, use, use sem_destroy: int sem_destroy(sem_t *sem); destroys the semaphore; no threads should be waiting on the semaphore if its destruction is to succeed. Example of use: sem_destroy(&sem_name); Using semaphores - a short example Consider the problem we had before and now let us use semaphores: Declare the semaphore global (outside of any funcion): sem_t mutex; Initialize the semaphore in the main function: sem_init(&mutex, 0, 1); Thread 1 Thread 2 data sem_wait (&mutex); --- 0 --- sem_wait (&mutex); 0 a = data; /* blocked */ 0 a = a + 1; /* blocked */ 0 data = a; /* blocked */ 1 sem_post (&mutex); /* blocked */ 1 /* blocked */ b = data; 1 /* blocked */ b = b + 1; 1 /* blocked */ data = b; 2 /* blocked */ sem_post (&mutex); 2 [data is fine. The data race is gone.] 4. Lab Exercise Activity 1 Use the example above as a guide to fix the program badcnt.c, so that the program always produces the expected output (the value 2*NITER). Make a copy of badcnt.c into goodcnt.c before you modify the code. To compile a program that uses pthreads and posix semaphores, use gcc -o goodcnt goodcnt.c -lpthread Activity 2 Given the following code, /* pc.c gcc pc.c -o pc -lpthread */ #include #include #include #include #include #define TRUE 1 #define BUFFER_SIZE 5 #define LOOPS 10 /* the semaphores */ sem_t full, empty, mutex; /* the buffer */ int buffer[BUFFER_SIZE]; /* buffer counter */ int in, out; pthread_t tid; //Thread ID pthread_attr_t attr; //Set of thread attributes void *producer(void *param); /* the producer thread */ void *consumer(void *param); /* the consumer thread */ void initializeData() { /* Create the mutex lock */ sem_init(&mutex, 0, 1); /* Create the full semaphore and initialize to 0 */ sem_init(&full, 0, 0); /* Create the empty semaphore and initialize to BUFFER_SIZE */ sem_init(&empty, 0, BUFFER_SIZE);
Answered Same DayJun 02, 2021

Answer To: CSE 460 Lab 6: Semaphores Highlights of this lab: 1. Definition of Semaphore 2. Why Semaphores? 3....

Ria answered on Jun 06 2021
135 Votes
goodcnt.c
#include
#include
#include
#include
#define NITER 1000000
// define a semaphore object
sem_t mutex;
int cnt = 0;
void * Count(void * a)
{
    // to wait on a semaphore
    sem_wait (&mutex);
    int i, tmp;
    for(i = 0; i < NITER; i++)
    {
        tmp = cnt;        /* copy the global cnt locally */
        tmp = tmp+1;    /* increment the local copy */
        cnt = tmp;        /* store the local value into the global cnt */
    }
    // to increment the value of a semaphore
    sem_post (&mutex);
}
int main(int argc, char * argv[])
{
    // initialization
    sem_init (&mutex, 0, 1);
    pthread_t tid1, tid2;
    if(pthread_create(&tid1, NULL, Count, NULL))
    {
        printf("\n ERROR creating thread 1");
        exit(1);
    }
    if(pthread_create(&tid2, NULL, Count, NULL))
    {
        printf("\n ERROR creating thread 2");
        exit(1);
    }
    if(pthread_join(tid1, NULL))    /* wait for the thread 1 to finish */
    {
        printf("\n ERROR joining thread");
        exit(1);
    }
    if(pthread_join(tid2, NULL))    /* wait for the thread 2 to finish */
    {
        printf("\n ERROR joining thread");
        exit(1);
    }
    if (cnt < 2 * NITER)
        printf("\n BOOM! cnt is [%d], should be %d\n", cnt, 2*NITER);
    else
        printf("\n OK! cnt is [%d]\n", cnt);
    
    pthread_exit(NULL);
    // to destroy a semaphore
    sem_destroy (&mutex);
}
lab6log.txt
$ gcc badcnt.c -o xbadcnt -lpthread
$ ./xbadcnt
BOOM! cnt is [1003522], should be 2000000
$ gcc -o goodcnt goodcnt.c -lpthread
$ ./goodcnt
OK! cnt is [2000000]
$ gcc pc.c -o pc -lpthread
$ ./pc 100 100
Producer [140140605282048] produced 383
Producer [140140596889344] produced 777
Producer [140140596889344] produced 915
Producer [140140588496640] produced 793
Producer [140140605282048] produced 886
    Consumer [140139698984704] consumed 793
    Consumer [140139690592000] consumed 793
Producer [140139690592000] produced 335
Producer [140139690592000] produced 467
    Consumer [140139690592000] consumed 467
Producer [140139690592000] produced 386
    Consumer [140139690592000] consumed 467
Producer [140139690592000] produced 97
    Consumer [140139682199296] consumed 97
Producer [140139682199296] produced 649
    Consumer [140139682199296] consumed 649
Producer [140139682199296] produced 492
    Consumer [140139682199296] consumed 492
    Consumer [140139682199296] consumed 492
Producer [140139682199296] produced 27
Producer [140139682199296] produced 652
    Consumer [140139673806592] consumed 652
Producer [140139673806592] produced 690
    Consumer [140139673806592] consumed 690
Producer [140139673806592] produced 763
    Consumer [140139657021184]
consumed 763
    Consumer [140139657021184] consumed 763
Producer [140139648628480] produced 926
Producer [140139648628480] produced 286
    Consumer [140139648628480] consumed 286
Producer [140139648628480] produced 540
    Consumer [140139648628480] consumed 540
    Consumer [140139648628480] consumed 540
Producer [140139648628480] produced 172
Producer [140139648628480] produced 689
    Consumer [140139648628480] consumed 689
    Consumer [140139640235776] consumed 689
Producer [140139640235776] produced 211
Producer [140139640235776] produced 736
    Consumer [140139640235776] consumed 211
Producer [140139640235776] produced 729
    Consumer [140139640235776] consumed 729
Producer [140139640235776] produced 567
    Consumer [140139640235776] consumed 567
    Consumer [140139640235776] consumed 567
    Consumer [140139631843072] consumed 567
Producer [140139631843072] produced 782
Producer [140139631843072] produced 97
Producer [140139631843072] produced 771
    Consumer [140139623450368] consumed 771
    Consumer [140139623450368] consumed 771
Producer [140139623450368] produced 123
Producer [140139623450368] produced 675
    Consumer [140139623450368] consumed 675
    Consumer [140139623450368] consumed 675
Producer [140139623450368] produced 135
Producer [140139623450368] produced 927
    Consumer [140139615057664] consumed 927
    Consumer [140139615057664] consumed 927
Producer [140139615057664] produced 802
Producer [140139615057664] produced 856
    Consumer [140139615057664] consumed 856
Producer [140139615057664] produced 22
    Consumer [140139615057664] consumed 22
Producer [140139615057664] produced 58
    Consumer [140139606664960] consumed 58
    Consumer [140139606664960] consumed 58
Producer [140139598272256] produced 167
Producer [140139598272256] produced 965
    Consumer [140139598272256] consumed 965
    Consumer [140139598272256] consumed 965
Producer [140139598272256] produced 393
Producer [140139598272256] produced 456
    Consumer [140139598272256] consumed 393
Producer [140139598272256] produced 11
    Consumer [140139598272256] consumed 11
Producer [140139598272256] produced 42
    Consumer [140139598272256] consumed 42
Producer [140139598272256] produced 528
    Consumer [140139598272256] consumed 528
Producer [140139598272256] produced 373
    Consumer [140139589879552] consumed 373
    Consumer [140139589879552] consumed 373
Producer [140139589879552] produced 421
Producer [140139589879552] produced 829
    Consumer [140139581486848] consumed 829
    Consumer [140139573094144] consumed 829
Producer [140139573094144] produced 537
Producer [140139573094144] produced 19
    Consumer [140139573094144] consumed 19
Producer [140139573094144] produced 198
    Consumer [140139573094144] consumed 198
Producer [140139573094144] produced 324
    Consumer [140139573094144] consumed 324
Producer [140139573094144] produced 315
    Consumer [140139573094144] consumed 315
Producer [140139573094144] produced 370
    Consumer [140139564701440] consumed 370
Producer [140139564701440] produced 413
    Consumer [140139564701440] consumed 413
Producer [140139564701440] produced 526
    Consumer [140139564701440] consumed 526
    Consumer [140139539523328] consumed 526
Producer [140139539523328] produced 980
Producer [140139539523328] produced 723
    Consumer [140139531130624] consumed 723
    Consumer [140139531130624] consumed 723
Producer [140139531130624] produced 873
Producer [140139522737920] produced 245
    Consumer [140139522737920] consumed 245
Producer [140139522737920] produced 956
    Consumer [140139522737920] consumed 956
Producer [140139522737920] produced 170
    Consumer [140139522737920] consumed 170
Producer [140139522737920] produced 996
    Consumer [140139522737920] consumed 996
Producer [140139522737920] produced 281
    Consumer [140139514345216] consumed 281
Producer [140139514345216] produced 305
    Consumer [140139514345216] consumed 305
Producer [140139514345216] produced 925
    Consumer [140139514345216] consumed 925
Producer [140139514345216] produced 84
    Consumer [140139514345216] consumed 84
Producer [140139514345216] produced 327
    Consumer [140139505952512] consumed 327
    Consumer [140139505952512] consumed 327
Producer [140139505952512] produced 505
Producer [140139497559808] produced 350
    Consumer [140139497559808] consumed 350
Producer [140139497559808] produced 846
    Consumer [140139497559808] consumed 846
Producer [140139497559808] produced 729
    Consumer [140139497559808] consumed 729
Producer [140139497559808] produced 313
    Consumer [140139497559808] consumed 313
Producer [140139497559808] produced 857
    Consumer [140139497559808] consumed 857
Producer [140139497559808] produced 124
    Consumer [140139497559808] consumed 124
Producer [140139497559808] produced 895
    Consumer [140139497559808] consumed 895
Producer [140139497559808] produced 582
    Consumer [140139497559808] consumed 582
Producer [140139497559808] produced 545
    Consumer [140139489167104] consumed 545
    Consumer [140139489167104] consumed 545
    Consumer [140139489167104] consumed 545
Producer [140139489167104] produced 367
Producer [140139480774400] produced 491
Producer [140139480774400] produced 227
    Consumer [140139480774400] consumed 227
Producer [140139480774400] produced 364
    Consumer [140139480774400] consumed 364
    Consumer [140139480774400] consumed 364
Producer [140139480774400] produced 43
    Consumer [140139480774400] consumed 364
Producer [140139480774400] produced 750
Producer [140139480774400] produced 936
    Consumer [140139472381696] consumed 750
Producer [140139472381696] produced 87
    Consumer [140139472381696] consumed 87
Producer [140139472381696] produced 276
    Consumer [140139472381696] consumed 276
Producer [140139472381696] produced 178
    Consumer [140139472381696] consumed 178
Producer [140139472381696] produced 788
    Consumer [140139472381696] consumed 178
Producer [140139472381696] produced 407
    Consumer [140139463988992] consumed 407
    Consumer [140139463988992] consumed 407
    Consumer [140139463988992] consumed 407
Producer [140139463988992] produced 651
Producer [140139463988992] produced 121
Producer [140139463988992] produced 858
    Consumer [140139463988992] consumed 121
Producer [140139463988992] produced 754
    Consumer [140139463988992] consumed 754
    Consumer [140139463988992] consumed 754
Producer [140139463988992] produced 60
Producer [140139463988992] produced 237
    Consumer [140139455596288] consumed 237
    Consumer [140139455596288] consumed 237
Producer [140139455596288] produced 368
Producer [140139455596288] produced 793
    Consumer [140139455596288] consumed 793
    Consumer [140139455596288] consumed 793
Producer [140139455596288] produced 12
Producer [140139455596288] produced 428
    Consumer [140139455596288] consumed 428
    Consumer [140139455596288] consumed 428
Producer [140139455596288] produced 586
Producer [140139447203584] produced 11
    Consumer [140139447203584] consumed 11
Producer [140139447203584] produced 226
    Consumer [140139447203584] consumed 226
Producer [140139447203584] produced 539
    Consumer [140139447203584] consumed 539
Producer [140139447203584] produced 795
    Consumer [140139447203584] consumed 795
Producer [140139447203584] produced 570
    Consumer [140139438810880] consumed 570
Producer [140139438810880] produced 434
    Consumer [140139438810880] consumed 570
Producer [140139430418176] produced 601
    Consumer [140139438810880] consumed 570
    Consumer [140139438810880] consumed 570
    Consumer [140139413632768] consumed 601
Producer [140139413632768] produced 902
    Consumer [140139413632768] consumed 902
Producer [140139413632768] produced 538
Producer [140139413632768] produced 606
Producer [140139413632768] produced 492
    Consumer [140139413632768] consumed 492
    Consumer [140139413632768] consumed 492
    Consumer [140139413632768] consumed 492
    Consumer [140139413632768] consumed 492
Producer [140139413632768] produced 362
    Consumer [140139413632768] consumed 362
Producer [140139413632768] produced 818
Producer [140139413632768] produced 128
Producer [140139405240064] produced 301
Producer [140139405240064] produced 756
    Consumer [140139405240064] consumed 756
Producer [140139405240064] produced 917
    Consumer [140139405240064] consumed 917
Producer [140139405240064] produced 917
    Consumer [140139405240064] consumed 917
    Consumer [140139405240064] consumed 917
Producer [140139405240064] produced 280
Producer [140139405240064] produced 324
    Consumer [140139405240064] consumed 324
    Consumer [140139405240064] consumed 324
Producer [140139396847360] produced 441
Producer [140139396847360] produced 470
    Consumer [140139396847360] consumed 441
Producer [140139396847360] produced 183
    Consumer [140139396847360] consumed 441
    Consumer [140139396847360] consumed 183
Producer [140139396847360] produced 31
Producer [140139396847360] produced 117
    Consumer [140139396847360] consumed 117
    Consumer [140139396847360] consumed 117
Producer [140139396847360] produced 429
Producer [140139388454656] produced 725
    Consumer [140139388454656] consumed 725
    Consumer [140139438810880] consumed 570
    Consumer [140139388454656] consumed 725
    Consumer [140139380061952] consumed 725
Producer [140139380061952] produced 530
Producer [140139380061952] produced 590
Producer [140139380061952] produced 505
Producer [140139380061952] produced 862
    Consumer [140139371669248] consumed 505
    Consumer [140139371669248] consumed 505
    Consumer [140139371669248] consumed 505
    Consumer [140139371669248] consumed 505
Producer [140139371669248] produced 67
Producer [140139371669248] produced 497
Producer [140139371669248] produced 786
Producer [140139371669248] produced 669
    Consumer [140139371669248] consumed 786
Producer [140139371669248] produced 929
    Consumer [140139371669248] consumed 929
Producer [140139371669248] produced 353
    Consumer [140139371669248] consumed 353
    Consumer [140139371669248] consumed 353
Producer [140139363276544] produced 69
Producer [140139363276544] produced 507
    Consumer [140139363276544] consumed 507
    Consumer [140139363276544] consumed 507
    Consumer [140139363276544] consumed 507
Producer [140139363276544] produced 219
Producer [140139354883840] produced 804
Producer [140139354883840] produced 348
    Consumer [140139354883840] consumed 804
    Consumer [140139354883840] consumed 348
Producer [140139354883840] produced 624
Producer [140139354883840] produced 622
    Consumer [140139354883840] consumed 622
    Consumer [140139354883840] consumed 622
    Consumer [140139354883840] consumed 622
    Consumer [140139354883840] consumed 622
    Consumer [140139371669248] consumed 786
Producer [140139354883840] produced 919
Producer [140139346491136] produced 270
Producer [140139354883840] produced 503
Producer [140139346491136] produced 784
    Consumer [140139346491136] consumed 270
Producer [140139346491136] produced 568
Producer [140139338098432] produced 340
    Consumer [140139338098432] consumed 340
Producer [140139338098432] produced 422
    Consumer [140139338098432] consumed 422
Producer [140139338098432] produced 708
    Consumer [140139338098432] consumed 708
Producer [140139338098432] produced 340
    Consumer [140139338098432] consumed 340
Producer [140139338098432] produced 605
    Consumer [140139338098432] consumed 605
Producer [140139338098432] produced 796
    Consumer [140139329705728] consumed 796
    Consumer [140139329705728] consumed 796
Producer [140139329705728] produced 618
Producer [140139329705728] produced 730
    Consumer [140139321313024] consumed 730
    Consumer [140139321313024] consumed 730
Producer [140139321313024] produced 862
Producer [140139321313024] produced 305
    Consumer [140139321313024] consumed 305
    Consumer [140139312920320] consumed 305
Producer [140139312920320] produced 921
Producer [140139312920320] produced 736
    Consumer [140139312920320] consumed 921
Producer [140139312920320] produced 444
    Consumer [140139312920320] consumed 444
Producer [140139312920320] produced 379
    Consumer [140139312920320] consumed 444
Producer [140139312920320] produced 522
    Consumer [140139312920320] consumed 522
Producer [140139312920320] produced 764
    Consumer [140139312920320] consumed 764
Producer [140139304527616] produced 228
    Consumer [140139304527616] consumed 764
Producer [140139304527616] produced 841
    Consumer [140139296134912] consumed 841
    Consumer [140139296134912] consumed 841
Producer [140139296134912] produced 193
Producer [140139296134912] produced 258
    Consumer [140139296134912] consumed 258
Producer [140139296134912] produced 500
    Consumer [140139296134912] consumed 500
Producer [140139296134912] produced 34
    Consumer [140139296134912] consumed 34
Producer [140139287742208] produced 764
    Consumer [140139287742208] consumed 764
Producer [140139287742208] produced 124
    Consumer [140139287742208] consumed 124
Producer [140139287742208] produced 914
    Consumer [140139287742208] consumed 914
Producer [140139287742208] produced 987
    Consumer [140139287742208] consumed 987
Producer [140139287742208] produced 856
    Consumer [140139287742208] consumed 856
Producer [140139287742208] produced 743
    Consumer [140139279349504] consumed 743
    Consumer [140139279349504] consumed 743
Producer [140139279349504] produced 365
Producer [140139279349504] produced 550
    Consumer [140139279349504] consumed 550
Producer [140139279349504] produced 434
    Consumer [140139270956800] consumed 434
Producer [140139270956800] produced 859
    Consumer [140139270956800] consumed 859
Producer [140139270956800] produced 432
    Consumer [140139270956800] consumed 432
Producer [140139270956800] produced 551
    Consumer [140139270956800] consumed 551
Producer [140139270956800] produced 437
    Consumer [140139270956800] consumed 437
Producer [140139270956800] produced 808
    Consumer [140139262564096] consumed 808
Producer [140139262564096] produced 228
    Consumer [140139262564096] consumed 228
Producer [140139262564096] produced 275
    Consumer [140139254171392] consumed 275
    Consumer [140139254171392] consumed 275
Producer [140139254171392] produced 584
Producer [140139254171392] produced 163
    Consumer [140139254171392] consumed 163
Producer [140139254171392] produced 403
    Consumer [140139254171392] consumed 403
Producer [140139254171392] produced 395
    Consumer [140139245778688] consumed 395
Producer [140139245778688] produced 29
    Consumer [140139245778688] consumed 29
Producer [140139245778688] produced 932
    Consumer [140139245778688] consumed 932
Producer [140139245778688] produced 399
    Consumer [140139245778688] consumed 399
Producer [140139245778688] produced 235
    Consumer [140139245778688] consumed 235
Producer [140139245778688] produced 676
    Consumer [140139245778688] consumed 676
Producer [140139237385984] produced 818
    Consumer [140139237385984] consumed 818
    Consumer [140139237385984] consumed 818
Producer [140139237385984] produced 143
Producer [140139237385984] produced 95
    Consumer [140139228993280] consumed 143
    Consumer [140139228993280] consumed 143
    Consumer [140139228993280] consumed 143
    Consumer [140139228993280] consumed 95
Producer [140139228993280] produced 529
Producer [140139228993280] produced 466
Producer [140139228993280] produced 84
    Consumer [140139228993280] consumed 466
Producer [140139220600576] produced 404
    Consumer [140139220600576] consumed 404
    Consumer [140139220600576] consumed 404
Producer [140139220600576] produced 443
Producer [140139220600576] produced 684
    Consumer [140139220600576] consumed 684
Producer [140139228993280] produced 926
Producer [140139220600576] produced 378
    Consumer [140139220600576] consumed 926
    Consumer [140139212207872] consumed 926
    Consumer [140139203815168] consumed 926
    Consumer [140139203815168] consumed 926
Producer [140139203815168] produced 904
Producer [140139203815168] produced 107
Producer [140139203815168] produced 445
Producer [140139203815168] produced 756
    Consumer [140139203815168] consumed 445
    Consumer [140139203815168] consumed 756
Producer [140139203815168] produced 421
Producer [140139203815168] produced 418
    Consumer [140139195422464] consumed 418
Producer [140139195422464] produced 688
    Consumer [140139195422464] consumed 688
    Consumer [140139195422464] consumed 688
Producer [140139195422464] produced 996
Producer [140139195422464] produced 348
    Consumer [140139195422464] consumed 348
Producer [140139195422464] produced 743
    Consumer [140139195422464] consumed 743
    Consumer [140139187029760] consumed 743
Producer [140139187029760] produced 426
Producer [140139187029760] produced 9
    Consumer [140139237385984] consumed 818
    Consumer [140139187029760] consumed 9
Producer [140139187029760] produced 490
Producer [140139187029760] produced 210
    Consumer [140139178637056] consumed 210
Producer [140139178637056] produced 440
    Consumer [140139178637056] consumed 440
Producer [140139178637056] produced 368
    Consumer [140139178637056] consumed 368
Producer [140139178637056] produced 619
    Consumer [140139178637056] consumed 619
Producer [140139178637056] produced 499
    Consumer [140139178637056] consumed 499
Producer [140139178637056] produced 772
    Consumer [140139170244352] consumed 772
Producer [140139170244352] produced 644
    Consumer [140139170244352] consumed 644
Producer [140139170244352] produced 481
    Consumer [140139170244352] consumed 481
Producer [140139170244352] produced 139
    Consumer [140139161851648] consumed 139
    Consumer [140139161851648] consumed 139
Producer [140139161851648] produced 954
Producer [140139161851648] produced 599
    Consumer [140139161851648] consumed 599
Producer [140139153458944] produced 709
    Consumer [140139153458944] consumed 709
Producer [140139153458944] produced 82
    Consumer [140139153458944] consumed 82
Producer [140139153458944] produced 542
    Consumer [140139153458944] consumed 542
Producer [140139153458944] produced 464
    Consumer [140139153458944] consumed 464
Producer [140139153458944] produced 197
    Consumer [140139153458944] consumed 197
Producer [140139145066240] produced 586
    Consumer [140139145066240] consumed 586
Producer [140139145066240] produced 355
    Consumer [140139145066240] consumed 355
Producer [140139145066240] produced 683
    Consumer [140139136673536] consumed 683
    Consumer [140139136673536] consumed 683
Producer [140139136673536] produced 611
Producer [140139136673536] produced 150
    Consumer [140139136673536] consumed 150
Producer [140139136673536] produced 828
    Consumer [140139136673536] consumed 828
Producer [140139136673536] produced 871
    Consumer [140139128280832] consumed 871
Producer [140139128280832] produced 732
    Consumer [140139128280832] consumed 732
Producer [140139128280832] produced 229
    Consumer [140139128280832] consumed 229
Producer [140139128280832] produced 299
    Consumer [140139128280832] consumed 299
Producer [140139128280832] produced 343
    Consumer [140139119888128] consumed 343
    Consumer [140139119888128] consumed 343
Producer [140139119888128] produced 311
Producer [140139119888128] produced 81
    Consumer [140139119888128] consumed 81
Producer [140139119888128] produced 368
    Consumer [140139111495424] consumed 368
Producer [140139111495424] produced 715
    Consumer [140139111495424] consumed 715
Producer [140139111495424] produced 810
    Consumer [140139111495424] consumed 810
Producer [140139111495424] produced 801
    Consumer [140139111495424] consumed 801
Producer [140139111495424] produced 149
    Consumer [140139111495424] consumed 149
Producer [140139111495424] produced 661
    Consumer [140139111495424] consumed 661
Producer [140139103102720] produced 91
    Consumer [140139103102720] consumed 91
Producer [140139103102720] produced 846
    Consumer [140139103102720] consumed 846
    Consumer [140139103102720] consumed 846
Producer [140139086317312] produced 626
    Consumer [140139086317312] consumed 626
Producer [140139077924608] produced 465
    Consumer [140139077924608] consumed 465
Producer [140139077924608] produced 640
    Consumer [140139077924608] consumed 640
Producer [140139077924608] produced 488
    Consumer [140139077924608] consumed 488
Producer [140139094710016] produced 320
Producer [140139077924608] produced 898
    Consumer [140139077924608] consumed 898
Producer [140139077924608] produced 713
    Consumer [140139077924608] consumed 713
Producer [140139077924608] produced 298
    Consumer [140139077924608] consumed 298
Producer [140139069531904] produced 524
    Consumer [140139069531904] consumed 524
Producer [140139069531904] produced 590
    Consumer [140139069531904] consumed 590
Producer [140139069531904] produced 708
    Consumer [140139069531904] consumed 708
Producer [140139069531904] produced 336
    Consumer [140139069531904] consumed 336
Producer [140139069531904] produced 637
    Consumer [140139094710016] consumed 846
    Consumer [140139061139200] consumed 637
Producer [140139061139200] produced 624
Producer [140139061139200] produced 600
    Consumer [140139061139200] consumed 600
    Consumer [140139094710016] consumed 846
    Consumer [140139061139200] consumed 600
    Consumer [140139061139200] consumed 600
Producer [140139061139200] produced 36
Producer [140139052746496] produced 994
    Consumer [140139052746496] consumed 994
Producer [140139052746496] produced 4
Producer [140139052746496] produced 379
    Consumer [140139052746496] consumed 379
Producer [140139052746496] produced 452
    Consumer [140139094710016] consumed 846
    Consumer [140139052746496] consumed 452
Producer [140139052746496] produced 814
    Consumer [140139052746496] consumed 814
Producer [140139052746496] produced 379
Producer [140139052746496] produced 850
    Consumer [140139052746496] consumed 850
Producer [140139044353792] produced 255
    Consumer [140139044353792] consumed 255
Producer [140139044353792] produced 468
    Consumer [140139044353792] consumed 468
Producer [140139044353792] produced 973
Producer [140139044353792] produced 579
    Consumer [140139044353792] consumed 973
Producer [140139044353792] produced 930
    Consumer [140139044353792] consumed 930
Producer [140139044353792] produced 933
    Consumer [140139035961088] consumed 933
Producer [140139035961088] produced 660
    Consumer [140139035961088] consumed 660
    Consumer [140139035961088] consumed 660
    Consumer [140139035961088] consumed 660
    Consumer [140139035961088] consumed 660
    Consumer [140139035961088] consumed 660
Producer [140139035961088] produced 981
Producer [140139035961088] produced 199
Producer [140139035961088] produced 567
    Consumer [140139035961088] consumed 199
Producer [140139027568384] produced 613
    Consumer [140139027568384] consumed 613
Producer [140139027568384] produced 899
    Consumer [140139027568384] consumed 899
    Consumer [140139027568384] consumed 899
Producer [140139027568384] produced 959
    Consumer [140139027568384] consumed 959
Producer [140139027568384] produced 326
Producer [140139027568384] produced 259
    Consumer [140139027568384] consumed 259
    Consumer [140139027568384] consumed 259
Producer [140139027568384] produced 773
    Consumer [140139019175680] consumed 773
Producer [140139019175680] produced 202
Producer [140139019175680] produced 202
    Consumer [140139019175680] consumed 202
    Consumer [140139019175680] consumed 202
Producer [140139019175680] produced 668
Producer [140139019175680]...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions ยป

Submit New Assignment

Copy and Paste Your Assignment Here