This is the mail archive of the pthreads-win32@sourceware.cygnus.com mailing list for the pthreads-win32 project. See the pthreads-win32 home page for more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

SV: semaphores




	-----Ursprungligt meddelande-----
	Från:	Ross Johnson [SMTP:rpj@ise.canberra.edu.au]
	Skickat:	den 21 april 1999 04:16
	Till:	Michael Ambrus
	Kopia:	'pthreads-win32 mailing list'
	Ämne:	Re: semaphores

	On Tue, 20 Apr 1999, Michael Ambrus wrote:

	> Hi,
	> I've tried the new semaphores and they seem to work fine except
that errno
	> is not properly set as Ross said.

	Are you using the 1999-04-07 snapshot? Anything before that should
	be upgraded. 
	Yes I am.
	Can you provide me with some code that illustrates the
	problem? 
	Here it comes:
	if (sem_init (&sem, 1 1) < 0) {
	      perror("sem_init");
	      printf("sem_init. errno is %d\n",errno);
	      switch (errno) {
	         case EINVAL :
	            printf("value exceeds SEM_VALUE_MAX. \n");
	            break;
	         case ENOSPC :
	            printf(" A resource required to initialize the semaphore
has been exhausted.\n 
	                     The resources have reached the limit on
semaphores, SEM_NSEMS_MAX. \n");
	            break;
	         case ENOSYS :
	            printf(" sem_init() is not supported by this
implementation. \n");
	            break;
	         case EPERM :
	            printf(" The calling process lacks the appropriate
privileges to initialize the semaphore. \n");
	            break;

	      }

	      scanf("%c",c);
	      exit(1);
	   }

	Perhaps I've misunderstood the usage of sem_init. In a manpage I
read (
http://www.doc.ic.ac.uk/~mac/manuals/solaris-manual-pages/solaris/usr/man/ma
n3r/sem_init.3r.html
<http://www.doc.ic.ac.uk/~mac/manuals/solaris-manual-pages/solaris/usr/man/m
an3r/sem_init.3r.html>  ) sem_init should return a value < 0 if an error
occurred and errno should be set with the corresponding error.

	The simple test I wrote (tests/errno1.c in the source tree)
	checks that two threads can set and retrieve values of errno
	independently. The test succeeds for MSVC (tested on WinNT) and
	Mingw32 (tested on Win98).

	I used cygwin GCC B20.1 ...

	> I'm confused about the "pshared" attribute
	> though. Should it not be != 0 if the semaphore is to be shared
between
	> processes/treads ?

	pshared should be non-zero for shared semaphores, however,
	pthreads-win32 doesn't yet support any process shared objects. So
	sem_init should return EPERM if you set pshared != 0.

	Some other thoughts..
*	pthread_delay_np ( se
http://www-server.rcnp.osaka-u.ac.jp/unix/DOCUMENTATION/HTML/AA-Q2DPC-TKT1_h
tml/thrd0384.html
<http://www-server.rcnp.osaka-u.ac.jp/unix/DOCUMENTATION/HTML/AA-Q2DPC-TKT1_
html/thrd0384.html>  ) would be nice. Is anyone working on it? 
*	What happens if sleep() is used? Is the whole process suspended, or
does other threads run?
*	POSIX queues would be nice. Is it possible to implement them with
POSIX 1003.1a semaphores?

W.k.r.
Michael Ambrus