Example #1
0
void
cv_wait(struct cv *cv, struct lock *lock)
{
        // Write this

        #if OPT_A1
        KASSERT(cv != NULL);
        KASSERT(lock != NULL);
        KASSERT(lock_do_i_hold(lock));
        spinlock_acquire(&cv->cv_spinlock);

        wchan_lock(cv->cv_wchan);
        lock_release(lock);

        spinlock_release(&cv->cv_spinlock);
        wchan_sleep(cv->cv_wchan);
        lock_acquire(lock);
        #else
        (void)cv;    // suppress warning until code gets written
        (void)lock;  // suppress warning until code gets written
        #endif
}
void
lock_acquire(struct lock *mylock)
{
//	Write this

	if(curthread == mylock->owner_thread) {
		return;
	}
	spinlock_acquire(&mylock->lk_spinlock);
	while (mylock->owner_thread != NULL) {
		wchan_lock(mylock->lk_wchan);
		spinlock_release(&mylock->lk_spinlock);
		wchan_sleep(mylock->lk_wchan);
		spinlock_acquire(&mylock->lk_spinlock);
	}
	mylock->owner_thread = curthread;
	spinlock_release(&mylock->lk_spinlock);

//	end of added stuff

//	(void)mylock;  // suppress warning until code gets written
}
Example #3
0
File: synch.c Project: mellwa/os
void
lock_acquire(struct lock *lock)
{
        // Write this
#if OPT_A1
    KASSERT(lock != NULL);
    KASSERT(curthread->t_in_interrupt == false);
    spinlock_acquire(&lock->lk_lock);
    while(lock->be_held){
        wchan_lock(lock->lk_wchan);
        spinlock_release(&lock->lk_lock);
        wchan_sleep(lock->lk_wchan);
        spinlock_acquire(&lock->lk_lock);
    }
    KASSERT(!lock->be_held);
    lock->who_hold = curthread;
    lock->be_held = true;
    //kprintf("%s acquire sucessfully\n",lock->lk_name);
    spinlock_release(&lock->lk_lock);
#else
        (void)lock;  // suppress warning until code gets written
#endif
}
Example #4
0
void
lock_acquire(struct lock *lock)
{
        // Write this
        #if OPT_A1
        KASSERT(lock != NULL);
        KASSERT(curthread->t_in_interrupt == false);
        spinlock_acquire(&lock->lk_spinlock);
        while(lock->lk_holder != NULL) {
          
            wchan_lock(lock->lk_wchan);
            spinlock_release(&lock->lk_spinlock);
       
            wchan_sleep(lock->lk_wchan);
            spinlock_acquire(&lock->lk_spinlock);
            
        }
        KASSERT(lock->lk_holder == NULL);
        lock->lk_holder = curthread;
        spinlock_release(&lock->lk_spinlock);
        #else
        (void)lock;  // suppress warning until code gets written
        #endif
}
Example #5
0
void
lock_acquire(struct lock *lock)
{
        // Write this
        KASSERT(lock != NULL);
                
        KASSERT(curthread->t_in_interrupt == false);
        
        
        spinlock_acquire(&lock->splk);
        
        //do i use curcpu?
        while(lock->currentplace != NULL ){
        wchan_lock(lock->lock_wchan);
        spinlock_release(&lock->splk);
        wchan_sleep(lock->lock_wchan);
        spinlock_acquire(&lock->splk);
        }
        
         lock->currentplace = curthread;
          //lock->lock_hold = 1;
          spinlock_release(&lock->splk);

}
Example #6
0
void
lock_acquire(struct lock *lock)
{

	spinlock_acquire(&lock->lk_spinlock);
	if(lock_do_i_hold(lock))
	{
		spinlock_release(&lock->lk_spinlock);
		return;
	}
	else
	{
	    while(lock->lk_owner != NULL)
		{
		   wchan_lock(lock->lk_wchan);
		   spinlock_release(&lock->lk_spinlock);
		   wchan_sleep(lock->lk_wchan);	
			
		   spinlock_acquire(&lock->lk_spinlock);
		}
		lock->lk_owner = curthread;
	}
	spinlock_release(&lock->lk_spinlock);
}
Example #7
0
File: synch.c Project: ghd213/OS161
void
lock_acquire(struct lock *lock)
{
	spinlock_acquire(&lock->lk_spinlock);
	if(lock_do_i_hold(lock))//we don't already have acquired it!
	{
		spinlock_release(&lock->lk_spinlock);
		return;
	}
	else
	{
		while(lock->lk_owner != NULL)
		{
			wchan_lock(lock->lk_wchan);
			spinlock_release(&lock->lk_spinlock);
			wchan_sleep(lock->lk_wchan);

			//returns from sleep here
			spinlock_acquire(&lock->lk_spinlock);
		}
		lock->lk_owner = curthread;
	}
	spinlock_release(&lock->lk_spinlock);
}