mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
Merge
This commit is contained in:
commit
c9b2bc62c9
2991 changed files with 67823 additions and 46239 deletions
|
@ -3174,20 +3174,14 @@ bool os::dont_yield() {
|
|||
}
|
||||
}
|
||||
|
||||
// Caveat: Solaris os::yield() causes a thread-state transition whereas
|
||||
// the linux and win32 implementations do not. This should be checked.
|
||||
|
||||
void os::yield() {
|
||||
// Yields to all threads with same or greater priority
|
||||
os::sleep(Thread::current(), 0, false);
|
||||
}
|
||||
|
||||
// Note that yield semantics are defined by the scheduling class to which
|
||||
// the thread currently belongs. Typically, yield will _not yield to
|
||||
// other equal or higher priority threads that reside on the dispatch queues
|
||||
// of other CPUs.
|
||||
|
||||
os::YieldResult os::NakedYield() { thr_yield(); return os::YIELD_UNKNOWN; }
|
||||
void os::naked_yield() {
|
||||
thr_yield();
|
||||
}
|
||||
|
||||
// Interface for setting lwp priorities. If we are using T2 libthread,
|
||||
// which forces the use of BoundThreads or we manually set UseBoundThreads,
|
||||
|
@ -5441,20 +5435,11 @@ static timestruc_t* compute_abstime(timestruc_t* abstime, jlong millis) {
|
|||
return abstime;
|
||||
}
|
||||
|
||||
// Test-and-clear _Event, always leaves _Event set to 0, returns immediately.
|
||||
// Conceptually TryPark() should be equivalent to park(0).
|
||||
|
||||
int os::PlatformEvent::TryPark() {
|
||||
for (;;) {
|
||||
const int v = _Event;
|
||||
guarantee((v == 0) || (v == 1), "invariant");
|
||||
if (Atomic::cmpxchg(0, &_Event, v) == v) return v;
|
||||
}
|
||||
}
|
||||
|
||||
void os::PlatformEvent::park() { // AKA: down()
|
||||
// Invariant: Only the thread associated with the Event/PlatformEvent
|
||||
// may call park().
|
||||
assert(_nParked == 0, "invariant");
|
||||
|
||||
int v;
|
||||
for (;;) {
|
||||
v = _Event;
|
||||
|
@ -5541,8 +5526,7 @@ void os::PlatformEvent::unpark() {
|
|||
// 1 :=> 1
|
||||
// -1 :=> either 0 or 1; must signal target thread
|
||||
// That is, we can safely transition _Event from -1 to either
|
||||
// 0 or 1. Forcing 1 is slightly more efficient for back-to-back
|
||||
// unpark() calls.
|
||||
// 0 or 1.
|
||||
// See also: "Semaphores in Plan 9" by Mullender & Cox
|
||||
//
|
||||
// Note: Forcing a transition from "-1" to "1" on an unpark() means
|
||||
|
@ -5746,10 +5730,9 @@ void Parker::park(bool isAbsolute, jlong time) {
|
|||
}
|
||||
|
||||
void Parker::unpark() {
|
||||
int s, status;
|
||||
status = os::Solaris::mutex_lock(_mutex);
|
||||
int status = os::Solaris::mutex_lock(_mutex);
|
||||
assert(status == 0, "invariant");
|
||||
s = _counter;
|
||||
const int s = _counter;
|
||||
_counter = 1;
|
||||
status = os::Solaris::mutex_unlock(_mutex);
|
||||
assert(status == 0, "invariant");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue