Почему jthread::get_stop_source не является константой?

#c #c 20 #stdthread

Вопрос:

Вопрос говорит сам за себя. [thread.jthread.stop]/1 говорит:

 [[nodiscard]] stop_source get_stop_source() noexcept;
 

Эффекты: Эквивалентны: return ssource ;

Почему это не чистый наблюдатель?

Ответ №1:

stop_source Объект позволяет запросить, чтобы поток, в котором есть такой объект (или его сопровождающий stop_token ), выполнил остановку. Такая просьба не логична const . Таким образом, если вы выберете a stop_source для a jthread , ожидается, что вы собираетесь выполнить вышеупомянутую операцию «не логически const «.

Таким образом, функция, которую вы использовали для его извлечения, не const является . Обратите внимание, что получение a stop_token является const , поскольку это наблюдатель потокобезопасного состояния, а не его модификатор.