Is deadline_timer.cancel() safe to be called in multithread executors?
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 25/100
- Tipo di issue
- Documentazione
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- networking
Direzione di ricerca
Inizia dalla nota collegata sulla thread safety di deadline_timer e dall’esempio che usa steady_timer, async_wait, cancel, post, io_context e thread_pool. Determina se la cancellazione da un altro thread è supportata mentre è in corso l’elaborazione della scadenza e identifica quale chiarimento nella documentazione sarebbe necessario; non viene indicato alcun file o test specifico.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hello!
I failed to google that, or find exact answer in docs. Hope I can get an answer hee!
So deadline_timer have this note:
Thread Safety
Distinct objects: Safe.
Shared objects: Unsafe.
My problem is, I can't understand if I (as lib's user) 'share' object with asio itself.
Is code below safe in real world scenario when timer->cancel() can be called in one moment with timer expiration?
auto ioc = boost::asio::io_context();
for (auto i = 0; i < 10000000; ++i)
{
auto timer = std::make_shared<boost::asio::steady_timer>(ioc);
timer->expires_at(std::chrono::steady_clock::now());
timer->async_wait([timer](auto){/*exact work doesn't matter*/});
auto cancelation = [timer]() { timer->cancel(); };
boost::asio::post(ioc, cancelation);
}
auto pool_size = 100;
auto pool = boost::asio::thread_pool(pool_size);
for (auto i = 0; i < pool_size; i++) {boost::asio::post(pool, [&ioc](){ioc.run();});}
Or in words: Can I call timer.cancel() method from arbitary thread* if timer was scheduled using executor(io_context/thread_pool) serviced by multiple threads?
* only one timer.cancel() at time, ofcourse, because timer public methods aren't thread safe between each other.
I ask that question because I want to schedule 'disposable' timers with option to cancel them without creating strand for each of such timers. Just using given executor.
- Lingua principale
- C++
- Stelle
- 1.6k
- Fork
- 485
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di boostorg/asio
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 58/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
-
Errors on AIX with C++20Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
Tutte le issue di boostorg/asio
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
lldb
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
llvm/llvm-project#229592 · 11 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 94/100
llvm/offload-test-suite#1560 ·
I maintainer di solito rispondono entro 1 giorno
-
agent:Windows bug MEDIUM performance tooling
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno