public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
From: Ross Johnson <rpj@ise.canberra.edu.au>
To: "Bossom, John" <John.Bossom@Cognos.COM>
Cc: "'Tristan Savatier'" <tristan@mpegtv.com>,
	"Stephen R. Johns" <stephen.johns@securelogix.com>,
	Steve Croall <SCroall@staffware.com>,
	"'John Funnell'" <jfunnell@projectmayo.com>,
	"'pthreads-win32@sourceware.cygnus.com'"
	<pthreads-win32@sourceware.cygnus.com>
Subject: Re: [pthread-win32] Re: pthreads on Win2k
Date: Fri, 23 Mar 2001 15:58:00 -0000	[thread overview]
Message-ID: <3ABBDFBF.3CF10D39@ise.canberra.edu.au> (raw)
In-Reply-To: <430F887D415DD1118C2700805F31ECF104AFA33E@sota0005.cognos.com>

Hi all,

Re the use of mutex_unlock() by threads that don't own the mutex:

The standard says:

  "The function pthread_mutex_unlock() is called by the owner of the
mutex
  object ... to release it. A pthread_mutex_unlock() call by a
  thread that is not the owner of the mutex results in undefined
behavior."

And under the heading "Errors":

  "For each of the following conditions, if the condition is detected,
the
  pthread_mutex_unlock() function shall return the corresponding error
number:

    [EPERM]  The current thread does not own the mutex."

The Linux pthread_mutex_unlock() manual page states:

  "The pthread_mutex_unlock function  returns  the  following
  error code on error:
 
     EINVAL the mutex has not been properly initialized.
 
     EPERM  the calling thread does not  own  the  mutex
            (``error checking'' mutexes only)."

Note the (``error checking'' mutexes only). The default type of mutex is
what it calls "fast", with no, or limited, error checking. There are two
other
"kinds" called PTHREAD_MUTEX_ERRORCHECK_NP and
PTHREAD_MUTEX_RECURSIVE_NP.
See the manual page for pthread_mutexattr_setkind_np().

Other implementations appear to be based on the OpenGroup documentation
which is similar (Solaris, True64Unix), where again the default type
appears to be non-errorchecking, leaving it up to the programmer to 
ensure sanity prevails. See:

http://www.opengroup.org/onlinepubs/7908799/xsh/pthread_mutexattr_gettype.html

We are currently working on adding the other mutex types as defined
in the OpenGroup pthread_mutexattr_settype() manual page, as well as
providing compatibility with Linux.

Regards.
Ross

"Bossom, John" wrote:
> 
> Here are some quotes from my multitude of books on PThreads:
> 
> 1) Multithreaded Programming with PTHREADS, Bil Lewis & Daniel Berg, page 86
>     "Because mutexes protect sections of code, it is not legal for
>      one thread to lock a mutex and for another thread to unlock it.
>      Depending upon the library implementation, this might not result
>      in a runtime error, but it is illegal."
> 
> 2) Programming with POSIX Threads, Butenhof, pg 319, describing the POSIX
> 1003.1c-1995 Interfaces:
> 
>     pthread_mutex_unlock
> 
>     Errors:
>         [EPERM}    calling thread does not own mutex.
> 
> 3) Pthreads Programming, Nichols:
> 
>   "Error Detection and Return Values", pg 68
>     "The Pthreads standard allows implementations to define the exact level
>     of error detection and reporting for some library calls. Although this
> allows
>     vendors to design efficient library calls, it can pose a particular
> problem
>     when you use mutex library calls.
>     In general, the Pthreads library reporta all errors associated with
> resource
>     availability and system constraints on function operation. For example,
> fi the
>     library realizes that it cannot initialize a mutex for a thread because
> the
>     library itself hasn't enough space in its internal tables, it returns a
> value
>     of EAGAIN or ENOMEM to the caller of pthread_mutex_init. However, the
> library does
>     not have to detect improper uses of a mutex and report any errors that
> might
>     result. Such improper uses include:
>         * Locking a mutex that you have not initialized
>         * Locking a mutex that you already own
>         * Unlocking a mutex that you don't own
>     Hopefully, the library you use does detect these misuses. If it does not
> in its
>     default mode, see if it has a debug mode that provides additional error
> detection."
> 
> Hope this helps,
> 
> John.
> 
> -----Original Message-----
> From: Tristan Savatier [ mailto:tristan@mpegtv.com ]
> Sent: March 23, 2001 3:58 PM
> To: Stephen R. Johns
> Cc: Steve Croall; 'John Funnell'; 'pthreads-win32@sourceware.cygnus.com'
> Subject: Re: [pthread-win32] Re: pthreads on Win2k
> 
> Stephen R. Johns wrote:
> >
> > Probably not related, but just in case...
> >
> > I've been trying to port a linux program to pthreadw32, and found
> > a mutex issue/difference.
> >
> > Linux allows threads other than the locking thread to unlock a mutex,
> > but pthreads does not.
> 
> I don't recall that the POSIX standard places a restriction on
> which thread can unlock a mutex, but it does not look like good
> programming style to have a mutex locked and unlocked by different
> threads..
> 
> If posix-thread places a restriction that is not defined by the
> standard, it should be documented.  It does not look like this
> one is a real problem... looks like POSIX should have put the
> restriction in the standard!  I suppose that the underlying win32
> threads do have this restriction.
> 
> -t

  reply	other threads:[~2001-03-23 15:58 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-03-23 13:35 Bossom, John
2001-03-23 15:58 ` Ross Johnson [this message]
  -- strict thread matches above, loose matches on Subject: below --
2001-03-23 17:21 Bossom, John
2001-03-23  1:35 Steve Croall
2001-03-23  6:31 ` Stephen R. Johns
2001-03-23 12:58   ` [pthread-win32] " Tristan Savatier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3ABBDFBF.3CF10D39@ise.canberra.edu.au \
    --to=rpj@ise.canberra.edu.au \
    --cc=John.Bossom@Cognos.COM \
    --cc=SCroall@staffware.com \
    --cc=jfunnell@projectmayo.com \
    --cc=pthreads-win32@sourceware.cygnus.com \
    --cc=stephen.johns@securelogix.com \
    --cc=tristan@mpegtv.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).