Sto cercando qualcosa potrebbe essere utilizzato per polling (come select
, kqueue
, epoll
cioè non occupato polling) in C/C++. In altre parole, ho bisogno di bloccare un thread e quindi di riattivarlo in un altro thread con il più piccolo overhead possibile.Esistono equivalenti al futex in Linux/Unix?
A mutex
+ condition variable
funziona, ma c'è un sacco di spese generali. Anche un futex
funziona, ma è solo per Linux (o forse no?). La sincronizzazione aggiuntiva non è necessaria finché il polling funziona correttamente, ad es. nessuna gara quando chiamo wait
e wake
in due thread.
Modifica: Se tale "funzione" non esiste in FreeBSD, come crearne una con tipi e chiamate di sistema incorporati in C++ 11?
Edit2: Dal momento che questa domanda è migrato a SO, mi piacerebbe per renderlo più generale (non per FreeBSD solo)
Devi anche bloccare su _multiple_ sources o solo uno? 'select',' poll' ecc. sono normalmente usati per (de) multiplexing di più fds, non solo per bloccarne uno. – Useless
@Utile Uno è abbastanza buono. Hai ragione, 'select' non è un buon esempio qui. L'ho menzionato solo per illustrare che non desidero * busy waiting * – GuLearn
Dopo la migrazione, mi sono confuso riguardo al "target" per questa domanda. Stai cercando la risposta per FreeBSD, POSIX o C++ 11 standard? –