OS_DisableScheduler

Syntax

#include <nitro/os.h>
u32 OS_DisableScheduler( void );

Arguments

None.

Return Values

The internal counter value after canceling the suppression of the scheduler operation.

When this value is larger than 0, the scheduler operation is suppressed. (It is suppressed, since a value greater than 0 is always returned.)

Description

Suppresses the operation of the thread system scheduler. In other words, this stops rescheduling temporarily.

Even when the functions such as OS_WakeupThread and OS_SetThreadPriority that have the possibility of generating the rescheduling of thread are called, this prevents the rescheduling of thread.

The function that cancels the suppression of the scheduler operation of OS_DisableScheduler is OS_EnableScheduler. Normally, these two functions should be used as a pair.

Call OS_DisableScheduler and OS_EnableScheduler while the interrupts are prohibited.

The scheduler has the internal counter. That counter, which is normally set to 0, increments by one with OS_DisableScheduler and decrements by one with OS_EnableScheduler. In addition, if it is larger than 0, this prevents rescheduling. The return value from this function is the value after the counter has changed. Therefore, after calling this function, the value that is larger than 0 is always returned.

A set of OS_DisableScheduler and OS_EnableScheduler as a pair can be nested.

Example:
	:
(void)OS_DisableRescheduler();
	:           // Rescheduling prohibited
(void)OS_DisableRescheduler();
	:
(void)OS_EnableRescheduler();
	:           // Rescheduling still prohibited
(void)OS_EnableRescheduler();
	:           // Rescheduling is allowed

Caution: Depending on the situation, the program may stop because there is no thread to operate. For example, if OS_DisableScheduler was set to prevent rescheduling and OS_ExitThread was called, the execution right cannot be given to other threads even after completing the current thread. It requires special attention to avoid such a situation.

See Also

OS_SelectThread, OS_RescheduleThread, OS_EnableScheduler

Revision History

2005/03/08 Standardized the Japanese term for "interrupt."
2005/01/21 Initial version.


CONFIDENTIAL