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

пробуждение одного потока от другого

Я использую .NET (C #).

если у меня есть 2 потока с T1 и T2, а T1 выглядит так:

while (true) 
{
  dosomething(); //this is a very fast operation
  sleep(5 seconds);
}

в то же время T2 делает что-то совершенно другое, однако время от времени ему нужно дать T1 толчок, чтобы он просыпался ото сна, даже если время сна еще не истекло. Как мне это сделать?


  • кстати, даже если T1 просыпается до истечения 5 секунд, вы не совсем уверены, что T1 привлечет внимание планировщика до окончания этих 5 секунд. Не полагайтесь слишком сильно на такие предположения! Скорее всего, более раннее пробуждение потока позволит выполнить работу раньше ... но это может произойти, а может и не произойти. 08.06.2009

Ответы:


1

Используйте WaitHandle, например ManualResetEvent (или AutoResetEvent).

В своем классе объявите ManualResetEvent:

private ManualResetEvent myEvent = new ManualResetEvent(false);

Поток1:

while(true) {
    doSomething();
    myEvent.WaitOne(5000);
    myEvent.Reset();
}

Thread2:

myEvent.Set();

Thread1 будет ждать 5 секунд или пока не будет установлено событие ManualResetEvent, в зависимости от того, что наступит раньше.

EDIT: добавлено AutoResetEvent выше

08.06.2009
  • В этом случае может быть лучше использовать «AutoResetEvent», чтобы возникли вопросы вроде «что произойдет, если T2 подаст сигнал сразу после WaitOne?» не нужно отвечать ... 08.06.2009
  • Согласованный. AutoResetEvent, наверное, проще. 08.06.2009

  • 2

    Если вы хотите это сделать, не переводите поток в спящий режим. Взгляните на это ТАК вопрос. Кроме того, этот блог вступление кажется многообещающим.

    Если вы хотите получить по этому поводу в GOOGLE больше информации, вы можете поискать «сигнализацию потоков» в .NET или что-то в этом роде.

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

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

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

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

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

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

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

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