W jaki sposób niezwiązane ze sobą procesy mogą współpracować przy użyciu futex?Udostępniaj futex pomiędzy niepowiązanymi procesami
Załóżmy, że mam niepowiązane procesy, z których jeden to, powiedzmy, podproces apache z moim modułem, inny jest np. skrypt w tle.
Chciałbym ustanowić zmienną warunkową z muteksem między tymi dwoma za pomocą futex, aby skorzystać na ścieżce szybkiego kodu przestrzeni użytkownika.
Wydaje mi się, że pamięć, w której zapisywany jest muteks, może znajdować się w pliku d, jeśli ta pamięć jest odwzorowana, np. mmap
. mlock
'd te dwa procesy mogłyby teoretycznie wywoływać zaproszenia futex na ten sam adres.
Alternatywnie, być może futex może być przekazywany z jednego procesu do drugiego przy użyciu FUTEX_FD
.
Zgłoszenia kodu akceptowane są języki niskie, wysokie i dynamiczne (C, C++, Python itp.). "Solidny futex" API musi być również wspierany.
Referencje:
- https://www.kernel.org/doc/Documentation/robust-futexes.txt
- http://locklessinc.com/articles/mutex_cv_futex/
P.S. Jeśli nie można tego zrobić, proszę szczegółowo wyjaśnić, dlaczego. –
Na stronie [manpage] (http://man7.org/linux/man-pages/man7/pthreads.7.html), że pthreads używa futexes wewnętrznie. Czy uważasz, że po prostu używasz API wysokiego poziomu (jak [rekomenduje futex manpage] (http://man7.org/linux/man-pages/man7/futex.7.html)) i użyj warunku pthread z '' PTHREAD_PROCESS_SHARED'? – Phillip
Sprawdziłeś to http://locklessinc.com/articles/mutex_cv_futex/ – Ghayel