예제 #1
0
void RestartThreadMain( void * arg )
{
        while(TRUE)
        {
                SchedulerStartCritical();

                if( SchedulerIsThreadDead( &DeathThread ) )
                {
                        SchedulerCreateThread(
                                        &DeathThread,
                                        1,
                                        DeathThreadStack,
                                        STACK_SIZE,
                                        DeathThreadMain,
                                        NULL,
                                        TRUE);

                        DeathCount--;
                }

                if( SchedulerIsThreadBlocked( &StallThread ) )
                {
                        SchedulerResumeThread( &StallThread );

                        StallCount--;
                }

                SchedulerEndCritical();
        }
}
예제 #2
0
void Reader( void * arg )
{
	INDEX index;

	int first,second;
	BOOL ready = FALSE;

	while( ! ready )
	{
		SchedulerStartCritical();
		if( TimesWritten > 0 )
		{
			ready = TRUE;
			SchedulerEndCritical();
		}
		else
		{
			SchedulerForceSwitch();	
		}
	}

	while(1)
	{
		ResourceLockShared( &BufferLock, NULL );

		//the resource should be shared
		ASSERT( BufferLock.State == RESOURCE_SHARED );

		for(index=1 ; index < BUFFER_SIZE; index++)
		{
			first = Buffer[index-1];
			second = Buffer[index];
			if( (first +1) != second )
			{
				KernelPanic( );
			}
		}

		ResourceUnlockShared( &BufferLock );

		SchedulerStartCritical();
		TimesRead++;
		SchedulerForceSwitch();
	}
}