Peter Dimov wrote:
[...]
> It's not that simple. Whether something is a programming error is determined
> by the library's specification, not vice versa. In other words, under the
> current specification, re-locking a locked lock :-) is not an error, as it
> is well defined. It is not a just an implementation question of using assert
> or throw, it is a design question.

http://www.opengroup.org/onlinepubs/007904975/functions/pthread_mutex_lock.html

"....
 If the mutex type is PTHREAD_MUTEX_NORMAL, deadlock detection shall 
 not be provided. Attempting to relock the mutex causes deadlock. If 
 a thread attempts to unlock a mutex that it has not locked or a 
 mutex which is unlocked, undefined behavior results.

 If the mutex type is PTHREAD_MUTEX_ERRORCHECK, then error checking 
 shall be provided. If a thread attempts to relock a mutex that it 
 has already locked, an error shall be returned. If a thread 
 attempts to unlock a mutex that it has not locked or a mutex which 
 is unlocked, an error shall be returned.

 ....

 For example, deadlocking on a double-lock is explicitly allowed 
 behavior in order to avoid requiring more overhead in the basic 
 mechanism than is absolutely necessary. (More "friendly" mutexes 
 that detect deadlock or that allow multiple locking by the same 
 thread are easily constructed by the user via the other mechanisms 
 provided. For example, pthread_self() can be used to record mutex 
 ownership.) Implementations might also choose to provide such 
 extended features as options via special mutex attributes.
 ...."

regards,
alexander.

--
Unix(R) and UnixWare(R) are registered trademarks of The Open Group 
in the United States and other countries. OTOH, "OPENSERVER" is the 
ABANDONED (dead) trademark in the United States. In other news, all 
SCO operating systems (if any/and etc.) are dead in other countries 
and the United States. Please visit <http://www.sco.de>.

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to