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:
>> 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 "

I've opened an upstream issue to track this in NetBSD: " Robust POSIX
mutexes unavailable on NetBSD #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_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);

    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);


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

Home | Main Index | Thread Index | Old Index