Nano Hash - криптовалюты, майнинг, программирование

Создает ли usleep точку отмены потока?

Согласно справочным страницам Linux, только следующие функции являются точками отмены потока: pthread_join, pthread_cond_wait, pthread_cond_timedwait, pthread_testcancel, sem_wait, sigwait. В моей тестовой программе поток завершается при использовании usleep. Функция потока:

void* ThreadFunction(void* arg)
{
    int n = 0;

    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
    pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);

    for(;;)
    {
        ostringstream s;
        s << "Thread iteration " << n++;
        PrintLine(s.str().c_str());

        usleep(500000);

        PrintLine("Check whether thread canceled...");
        pthread_testcancel();
        PrintLine("Thread is not canceled - continue");
    }

    pthread_exit(NULL);
}

Когда основная функция выполняет pthread_cancel, я ожидаю, что последняя строка, напечатанная ThreadFunction, будет «Проверить, отменен ли поток…». Однако перед выходом всегда печатается "Итерация потока...". Это означает, что usleep является точкой отмены. Я думаю, что это правильно - любая функция сна должна быть отменяемой. Но об этом не написано в документации.

Если строка usleep прокомментирована, последней строкой вывода потока будет "Проверить, отменен ли поток...", как я и ожидал.

15.07.2010

Ответы:


1

Полный список точек отмены и необязательных точек отмены доступен в спецификации POSIX:

http://opengroup.org/onlinepubs/007908775/xsh/threads.html

usleep() является обязательным пунктом отмены

15.07.2010
  • +1: Почти то же самое, что я собирался сказать. Вот альтернативный URL (позднее POSIX) для того же Информация. 15.07.2010

  • 2

    Я видел дерево вызовов pthread_testcanel в Instrument.app на Mac OS, которое вызывает функцию OSSpinLockLock.

    но usleep кажется нет.

    29.07.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..