Linked by Elad Lahav on Thu 18th Feb 2016 19:27 UTC
QNX

A mutex is a common type of lock used to serialize concurrent access by multiple threads to shared resources. While support for POSIX mutexes in the QNX Neutrino Realtime OS dates back to the early days of the system, this area of the code has seen considerable changes in the last couple of years.

Permalink for comment 624998
To read all comments associated with this story, please click here.
RE[2]: Mutex behavior
by Alfman on Fri 19th Feb 2016 02:52 UTC in reply to "RE: Mutex behavior"
Alfman
Member since:
2011-01-28

elahav,

If you are waiting on an event that can be generated by any, or even multiple, threads, then semaphores are not what you are looking for. Perhaps a condition variable?


No actually, the purpose of the mutex was really just to protect a data structure from concurrent access.

Interestingly, your original goal, that of explicitly handing over a mutex from one thread to another without releasing it is something that has come up several times in the past. It's not hard to implement, I'm just not sure that the semantics of such an operation are fully understood.



Once the error was tracked to the mutex, it wasn't hard to fix: just replace the mutex with a posix semaphore.

sem_init(&sem, 1);
...
sem_wait(sem); // lock
// equivalent to mutex
sem_post(sem); // unlock (even in new thread)


It's semantically identical to the mutex, with the benefit of having defined behavior across threads.

Edited 2016-02-19 02:54 UTC

Reply Parent Score: 2