Path: utzoo!utgpu!jarvis.csri.toronto.edu!csri.toronto.edu!moraes Newsgroups: comp.sys.sgi From: moraes@csri.toronto.edu (Mark Moraes) Subject: semaphores vs locks? Message-ID: <1989Sep5.185510.7836@jarvis.csri.toronto.edu> Organization: University of Toronto, CSRI Date: 5 Sep 89 22:55:11 GMT On an Iris4d multiprocessor, what is the difference between a semaphore and a lock? I couldn't find any specific mention of the difference in the documentation. As far as I can tell, semaphores have queues in which threads wait till the semaphore is freed, whereas locks are continuously retried (assuming ussetlock) with some delay. For a system with hardware locks, which is faster/cheaper - a semaphore or a lock? Does a lock consume much cpu time while spinning? Is the cost of going to sleep and awakening on a semaphore high? Does anyone have any numbers on these? Is there a section of the manual summarizing the parallel facilities available? (Suggestion: Perhaps a future release of the documentation could group manual pages by subsection and alphabetically - i.e. all manual pages for 3P together, rather than alphabetically across all subsections) The following is a list I've created, with some attempt to order them in 'recommended reading order'. Have I missed anything? usinit, _utrace (3P) - semaphore and lock initialization routine usconfig (3P) - semaphore and lock configuration operations taskblock, taskunblock, tasksetblockcnt (3P) - routines to block/unblock tasks taskcreate (3P) - create a new task taskdestroy (3P) - destroy a task taskctl (3P) - operations on a task barrier, new_barrier, free_barrier (3P) - barrier functions usnewlock (3P) - allocates and initializes a lock usinitlock (3P) - initializes a lock ussetlock, uscsetlock, uswsetlock, ustestlock, usunsetlock (3P) - lock routines usfreelock (3P) - free a lock usctllock (3P) - lock control operations usnewsema (3P) - allocates and initializes a semaphore usinitsema (3P) - initializes a semaphore uspsema (3P) - attempt to acquire a semaphore usvsema (3P) - frees a resource to a semaphore ustestsema (3P) - return the value of a semaphore uscpsema (3P) - attempts to acquire a semaphore, and fails if not possible usfreesema (3P) - free a semaphore usctlsema (3P) - semaphore control operations usmalloc, usfree, usrealloc (3P) - user shared memory allocator acreate, adelete, amalloc, afree, arealloc, acalloc, amallopt, amallinfo (3P) - arbitrary arena main memory allocator pcreate: pcreatel, pcreatev, pcreateve, pcreatelp, pcreatevp (3P) - create a process m_fork, m_kill_procs, m_set_procs, m_get_numprocs, m_get_myid, m_next, m_lock, m_unlock, (3P) - parallel programming primitives sproc (2) - create a new share group process blockproc, unblockproc, setblockproccnt (2) - routines to block/unblock processes Thanks.