/** enters this mutex for reading */ final void readEnter(Thread t) { enter(S, t, true); }
/** enters this mutex for writing */ final void writeEnter(Thread t) { enter(X, t, true); }
private boolean reenterImpl(Thread t, int mode) { // from leaveX -> grantedMode is NONE or S if (mode == S) { if ((grantedMode != NONE) && (grantedMode != S)) { throw new IllegalStateException(this.toString()); } enter(mode, t, true); return false; } // assert (mode == X) ThreadInfo tinfo = getThreadInfo(t); boolean chainFromLeaveX = ((grantedMode == CHAIN) && (tinfo != null) && (tinfo.counts[X] > 0)); // process grantedMode == X or CHAIN from leaveX OR grantedMode == NONE from leaveS if ((grantedMode == X) || (grantedMode == NONE) || chainFromLeaveX) { enter(mode, t, true); return false; } else { // remains grantedMode == CHAIN or S from leaveS, so it will be CHAIN if (readersNo == 0) { throw new IllegalStateException(this.toString()); } ThreadInfo info = new ThreadInfo(t, mode); registeredThreads.put(t, info); // prevent from grantedMode == NONE (another thread - leaveS) readersNo += 2; // prevent from new readers setGrantedMode(CHAIN); return true; } // else X means ERROR!!! }
/** enters this mutex for writing */ private void writeEnter(Thread t) { enter(X, t, true); } /** enters this mutex for reading */
/** enters this mutex for writing */ private void writeEnter(Thread t) { enter(X, t, true); } /** enters this mutex for reading */
/** enters this mutex for reading */ final void readEnter(Thread t) { enter(S, t, true); }
/** enters this mutex for reading */ private void readEnter(Thread t) { enter(S, t, true); }
/** enters this mutex for reading */ final void readEnter(Thread t) { enter(S, t, true); }
/** enters this mutex for writing */ final void writeEnter(Thread t) { enter(X, t, true); }
/** enters this mutex for reading */ private void readEnter(Thread t) { enter(S, t, true); }
/** enters this mutex for writing */ final void writeEnter(Thread t) { enter(X, t, true); }
private boolean reenterImpl(Thread t, int mode) { // from leaveX -> grantedMode is NONE or S if (mode == S) { if ((grantedMode != NONE) && (grantedMode != S)) { throw new IllegalStateException(this.toString()); } enter(mode, t, true); return false; } // assert (mode == X) ThreadInfo tinfo = getThreadInfo(t); boolean chainFromLeaveX = ((grantedMode == CHAIN) && (tinfo != null) && (tinfo.counts[X] > 0)); // process grantedMode == X or CHAIN from leaveX OR grantedMode == NONE from leaveS if ((grantedMode == X) || (grantedMode == NONE) || chainFromLeaveX) { enter(mode, t, true); return false; } else { // remains grantedMode == CHAIN or S from leaveS, so it will be CHAIN if (readersNo == 0) { throw new IllegalStateException(this.toString()); } ThreadInfo info = new ThreadInfo(t, mode); registeredThreads.put(t, info); // prevent from grantedMode == NONE (another thread - leaveS) readersNo += 2; // prevent from new readers setGrantedMode(CHAIN); return true; } // else X means ERROR!!! }
private boolean reenterImpl(Thread t, int mode) { // from leaveX -> grantedMode is NONE or S if (mode == S) { if ((grantedMode != NONE) && (grantedMode != S)) { throw new IllegalStateException(this.toString()); } enter(mode, t, true); return false; } // assert (mode == X) ThreadInfo tinfo = getThreadInfo(t); boolean chainFromLeaveX = ((grantedMode == CHAIN) && (tinfo != null) && (tinfo.counts[X] > 0)); // process grantedMode == X or CHAIN from leaveX OR grantedMode == NONE from leaveS if ((grantedMode == X) || (grantedMode == NONE) || chainFromLeaveX) { enter(mode, t, true); return false; } else { // remains grantedMode == CHAIN or S from leaveS, so it will be CHAIN if (readersNo == 0) { throw new IllegalStateException(this.toString()); } ThreadInfo info = new ThreadInfo(t, mode); registeredThreads.put(t, info); // prevent from grantedMode == NONE (another thread - leaveS) readersNo += 2; // prevent from new readers setGrantedMode(CHAIN); return true; } // else X means ERROR!!! }