Example #1
0
//No need to relnquish lock on unlock
int pthread_mutex_unlock(pthread_mutex_t *mutex)
{
    // TODO
    //Mark all threads waiting on this lock as active
    struct map<pthread_t,thread_data*>::map_data* start=all_thread.ROOT;

    while(start!=NULL) {
        struct thread_data* thread_data=start->data;
        if(thread_data->state==PTHREAD_WAITING_THREAD && thread_data->waiting_lock==mutex)
            thread_data->state=PTHREAD_ACTIVE_THREAD;
        start=start->next;
    }

    lock_map.remove(mutex);
    PRINT("UNLOCK %lx \n",mutex);
    return original_pthread_mutex_unlock(mutex);
}