tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pthread library related



On 20.05.2016 11:15, Joerg Sonnenberger wrote:
> On Thu, May 19, 2016 at 01:36:29PM -0400, Christos Zoulas wrote:
>> You can see how FreeBSD is implementing them; it is a lot of code to do
>> this and would require some architectural review. The relevant files are:
>>
>> http://nxr.netbsd.org/xref/src-freebsd/lib/libthr/thread/thr_pshared.c
>> http://nxr.netbsd.org/xref/src-freebsd/lib/libthr/thread/thr_barrierattr.c
>> http://nxr.netbsd.org/xref/src-freebsd/sys/kern/kern_umtx.c
>>
>> We don't have such mutex functionality in our kernel. Implementing this
>> would be a GSoC project in itself.
> 
> I don't think we want to use futexes in general. I'm not even sure I
> care about performance for something horrible like "robust" mutexes at
> all. A good starting point might to just extend the existing semaphores,
> if necessary.
> 
> Joerg
> 

Robust POSIX mutexes are now needed in the .NET platform to implement
named mutexes:

"Add named mutex for cross-process synchronization "

https://github.com/dotnet/coreclr/commit/249221697fc5cf18c07566bac0e9f0eb6525218a

I've opened an upstream issue to track this in NetBSD: " Robust POSIX
mutexes unavailable on NetBSD #5128 "
https://github.com/dotnet/coreclr/issues/5128

A short example of what is needed is presented here (CMake test
extracted from the mentioned patch):

#include <errno.h>
#include <pthread.h>
#include <time.h>

int main()
{
    pthread_mutexattr_t mutexAttributes;
    pthread_mutexattr_init(&mutexAttributes);
    pthread_mutexattr_setpshared(&mutexAttributes, PTHREAD_PROCESS_SHARED);
    pthread_mutexattr_settype(&mutexAttributes, PTHREAD_MUTEX_RECURSIVE);
    pthread_mutexattr_setrobust(&mutexAttributes, PTHREAD_MUTEX_ROBUST);

    pthread_mutex_t mutex;
    pthread_mutex_init(&mutex, &mutexAttributes);

    pthread_mutexattr_destroy(&mutexAttributes);+
    struct timespec timeoutTime;
    timeoutTime.tv_sec = 1; // not the right way to specify absolute
time, but just checking availability of timed lock
    timeoutTime.tv_nsec = 0;
    pthread_mutex_timedlock(&mutex, &timeoutTime);
    pthread_mutex_consistent(&mutex);

    pthread_mutex_destroy(&mutex);

    int error = EOWNERDEAD;
    error = ENOTRECOVERABLE;
    error = ETIMEDOUT;
    error = 0;
    return error;
}


Home | Main Index | Thread Index | Old Index