Question I You are going to use the semaphores for process synchronization. Therefore, you are asked to develop a consumer and producer multithreaded program. Let us assume, that we have a thread (producer, we will call it producer_thread) reading data (positive integer numbers) from the keyboard, entered by a user to be stored in an array (dynamic array). (Assume that the array can hold all numbers entered without overflow.) Another thread (consumer, we will call it consumer_thread) should read data from the array and write them into a file. This thread should run concurrently with the producer (producer_thread). Your program should make sure that the consumer_thread can read from the array only after the producer_thread has stored new data. Both threads will stop when the user enters a negative number (well synchronized). Another thread (testing_thread) should start reading the array data as well as the file data and display them on the screen in order to verify if the consumer and producer have worked in a correctly synchronized fashion. This thread should not be synchronized with other threads, it is intended for testing that consumer thread is synchronized with produce thread. Provide your tutor with the source code as well as screen snapshots that show the work of the testing_thread. 1 TM298_TMA_Q2/build.xml Builds, tests, and runs the project TM298_TMA_Q2. TM298_TMA_Q2/manifest.mf Manifest-Version: 1.0 X-COMMENT: Main-Class will be added automatically by build TM298_TMA_Q2/nbproject/build-impl.xml ...