Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Is deadline_timer.cancel() safe to be called in multithread executors?

Aperta
#447 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di boostorg/asio

Tutte le issue di boostorg/asio

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.