Quiz 3

Test what you have learnt so far.

We'll cover the following...

Question # 1

Consider the ping pong program from the Semaphore section. Will the program work if both the semaphores sem1 and sem2 are initialized to 1 instead of 0? The code is reproduced below for reference:

from multiprocessing import Semaphore, Process, Value
from ctypes import c_bool
import time
import multiprocessing


def process_A(sem1, sem2, exit):
    while not exit.value:
        print("ping")
        sem1.release()
        sem2.acquire()
        time.sleep(0.05)


def process_B(sem1, sem2, exit):
    while not exit.value:
        # wait for a prime number to become available
        sem1.acquire()
        print("pong")
        sem2.release()
        time.sleep(0.05)


if __name__ == '__main__':
    sem1 = Semaphore(0) # change from 0 to 1 for this question
    sem2 = Semaphore(0) # change from 0 to 1 for this question

    exit_prog = Value(c_bool, False)

    processA = Process(target=process_A, args=(sem1, sem2, exit_prog))
    processA.start()

    processB = Process(target=process_B, args=(sem1, sem2, exit_prog))
    processB.start()

    # Let the threads run for 3 seconds
    time.sleep(3)

    exit_prog.value = True

    processA.join()
    processB.join()
...