 /**  * Calls signal() on a Semaphore  *  * When a thread calls this function the value of the semaphore is incremented.  * If the value is not greater than 0, then we should at least have one thread  * waiting on it. The thread at the top of the wait queue associated with the  * semaphore is dequeued from the wait queue and queued in the run queue. The  * thread state is then set to RUNNABLE.  * @param semaphore index of semaphore to be manipulated in the table   *   */ void 