3279 // Consider passing back the return value from SwitchToThread(). 3280 if (os::Kernel32Dll::SwitchToThreadAvailable()) { 3281 return SwitchToThread() ? os::YIELD_SWITCHED : os::YIELD_NONEREADY ; 3282 } else { 3283 Sleep(0); 3284 } 3285 return os::YIELD_UNKNOWN ; 3286 } 3287 3288 void os::yield() { os::NakedYield(); } 3289 3290 void os::yield_all(int attempts) { 3291 // Yields to all threads, including threads with lower priorities 3292 Sleep(1); 3293 } 3294 3295 // Win32 only gives you access to seven real priorities at a time, 3296 // so we compress Java's ten down to seven. It would be better 3297 // if we dynamically adjusted relative priorities. 3298 3299 int os::java_to_os_priority[MaxPriority + 1] = { 3300 THREAD_PRIORITY_IDLE, // 0 Entry should never be used 3301 THREAD_PRIORITY_LOWEST, // 1 MinPriority 3302 THREAD_PRIORITY_LOWEST, // 2 3303 THREAD_PRIORITY_BELOW_NORMAL, // 3 3304 THREAD_PRIORITY_BELOW_NORMAL, // 4 3305 THREAD_PRIORITY_NORMAL, // 5 NormPriority 3306 THREAD_PRIORITY_NORMAL, // 6 3307 THREAD_PRIORITY_ABOVE_NORMAL, // 7 3308 THREAD_PRIORITY_ABOVE_NORMAL, // 8 3309 THREAD_PRIORITY_HIGHEST, // 9 NearMaxPriority 3310 THREAD_PRIORITY_HIGHEST // 10 MaxPriority 3311 }; 3312 3313 int prio_policy1[MaxPriority + 1] = { 3314 THREAD_PRIORITY_IDLE, // 0 Entry should never be used 3315 THREAD_PRIORITY_LOWEST, // 1 MinPriority 3316 THREAD_PRIORITY_LOWEST, // 2 3317 THREAD_PRIORITY_BELOW_NORMAL, // 3 3318 THREAD_PRIORITY_BELOW_NORMAL, // 4 3319 THREAD_PRIORITY_NORMAL, // 5 NormPriority 3320 THREAD_PRIORITY_ABOVE_NORMAL, // 6 3321 THREAD_PRIORITY_ABOVE_NORMAL, // 7 3322 THREAD_PRIORITY_HIGHEST, // 8 3323 THREAD_PRIORITY_HIGHEST, // 9 NearMaxPriority 3324 THREAD_PRIORITY_TIME_CRITICAL // 10 MaxPriority 3325 }; 3326 3327 static int prio_init() { 3328 // If ThreadPriorityPolicy is 1, switch tables 3329 if (ThreadPriorityPolicy == 1) { 3330 int i; 3331 for (i = 0; i < MaxPriority + 1; i++) { 3332 os::java_to_os_priority[i] = prio_policy1[i]; 3333 } 3334 } 3335 return 0; 3336 } 3337 3338 OSReturn os::set_native_priority(Thread* thread, int priority) { 3339 if (!UseThreadPriorities) return OS_OK; 3340 bool ret = SetThreadPriority(thread->osthread()->thread_handle(), priority) != 0; 3341 return ret ? OS_OK : OS_ERR; 3342 } 3343 3344 OSReturn os::get_native_priority(const Thread* const thread, int* priority_ptr) { | 3279 // Consider passing back the return value from SwitchToThread(). 3280 if (os::Kernel32Dll::SwitchToThreadAvailable()) { 3281 return SwitchToThread() ? os::YIELD_SWITCHED : os::YIELD_NONEREADY ; 3282 } else { 3283 Sleep(0); 3284 } 3285 return os::YIELD_UNKNOWN ; 3286 } 3287 3288 void os::yield() { os::NakedYield(); } 3289 3290 void os::yield_all(int attempts) { 3291 // Yields to all threads, including threads with lower priorities 3292 Sleep(1); 3293 } 3294 3295 // Win32 only gives you access to seven real priorities at a time, 3296 // so we compress Java's ten down to seven. It would be better 3297 // if we dynamically adjusted relative priorities. 3298 3299 int os::java_to_os_priority[CriticalPriority + 1] = { 3300 THREAD_PRIORITY_IDLE, // 0 Entry should never be used 3301 THREAD_PRIORITY_LOWEST, // 1 MinPriority 3302 THREAD_PRIORITY_LOWEST, // 2 3303 THREAD_PRIORITY_BELOW_NORMAL, // 3 3304 THREAD_PRIORITY_BELOW_NORMAL, // 4 3305 THREAD_PRIORITY_NORMAL, // 5 NormPriority 3306 THREAD_PRIORITY_NORMAL, // 6 3307 THREAD_PRIORITY_ABOVE_NORMAL, // 7 3308 THREAD_PRIORITY_ABOVE_NORMAL, // 8 3309 THREAD_PRIORITY_HIGHEST, // 9 NearMaxPriority 3310 THREAD_PRIORITY_HIGHEST // 10 MaxPriority 3311 THREAD_PRIORITY_HIGHEST // 11 CriticalPriority 3312 }; 3313 3314 int prio_policy1[CriticalPriority + 1] = { 3315 THREAD_PRIORITY_IDLE, // 0 Entry should never be used 3316 THREAD_PRIORITY_LOWEST, // 1 MinPriority 3317 THREAD_PRIORITY_LOWEST, // 2 3318 THREAD_PRIORITY_BELOW_NORMAL, // 3 3319 THREAD_PRIORITY_BELOW_NORMAL, // 4 3320 THREAD_PRIORITY_NORMAL, // 5 NormPriority 3321 THREAD_PRIORITY_ABOVE_NORMAL, // 6 3322 THREAD_PRIORITY_ABOVE_NORMAL, // 7 3323 THREAD_PRIORITY_HIGHEST, // 8 3324 THREAD_PRIORITY_HIGHEST, // 9 NearMaxPriority 3325 THREAD_PRIORITY_TIME_CRITICAL // 10 MaxPriority 3326 THREAD_PRIORITY_TIME_CRITICAL // 11 CriticalPriority 3327 }; 3328 3329 static int prio_init() { 3330 // If ThreadPriorityPolicy is 1, switch tables 3331 if (ThreadPriorityPolicy == 1) { 3332 int i; 3333 for (i = 0; i < MaxPriority + 1; i++) { 3334 os::java_to_os_priority[i] = prio_policy1[i]; 3335 } 3336 } 3337 return 0; 3338 } 3339 3340 OSReturn os::set_native_priority(Thread* thread, int priority) { 3341 if (!UseThreadPriorities) return OS_OK; 3342 bool ret = SetThreadPriority(thread->osthread()->thread_handle(), priority) != 0; 3343 return ret ? OS_OK : OS_ERR; 3344 } 3345 3346 OSReturn os::get_native_priority(const Thread* const thread, int* priority_ptr) { |