delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-developers/2001/10/21/22:15:54

Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-developers-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-developers/>
List-Post: <mailto:cygwin-developers AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-developers-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-developers-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin-developers AT sources DOT redhat DOT com
Date: Sun, 21 Oct 2001 22:18:05 -0400
From: Jason Tishler <jason AT tishler DOT net>
To: Robert Collins <robert DOT collins AT itdomain DOT com DOT au>
Cc: cygwin-developers AT sourceware DOT cygnus DOT com
Subject: Re: fix cond_race... was RE: src/winsup/cygwin ChangeLog thread.cc thread.h ...
Message-ID: <20011021221805.B1884@dothill.com>
Mail-Followup-To: Robert Collins <robert DOT collins AT itdomain DOT com DOT au>,
cygwin-developers AT sourceware DOT cygnus DOT com
Mime-Version: 1.0
In-Reply-To: <010601c15a9c$8329b070$0200a8c0@lifelesswks>
User-Agent: Mutt/1.3.18i

Rob,

On Mon, Oct 22, 2001 at 11:54:39AM +1000, Robert Collins wrote:
> Of course, if python doesn't set thread priority then 3 is unlikely.

I don't know, but I found the following tidbit while grep-ing the Python
code for "priority":

        // Using Sleep(0) can cause a priority inversion.
        // Sleep(0) only yields the processor if there's
        // another thread of the same priority that's
        // ready to run.  If a high-priority thread is
        // trying to acquire the lock, which is held by
        // a low-priority thread, then the low-priority
        // thread may never get scheduled and hence never
        // free the lock.  NT attempts to avoid priority
        // inversions by temporarily boosting the priority
        // of low-priority runnable threads, but the problem
        // can still occur if there's a medium-priority
        // thread that's always runnable.  If Sleep(1) is used,
        // then the thread unconditionally yields the CPU.  We
        // only do this for the second and subsequent even
        // iterations, since a millisecond is a long time to wait
        // if the thread can be scheduled in again sooner
        // (~100,000 instructions).
        // Avoid priority inversion: 0, 1, 0, 1,...

The above seems to resonant with your possibility #3.

Jason

- Raw text -


  webmaster     delorie software   privacy  
  Copyright 2019   by DJ Delorie     Updated Jul 2019