Другими словами, есть ли способ получить «обратную» переменную условия, которая будет блокировать ожидающий поток до тех пор, пока блокирующий поток не снимет блокировку, но не блокировать ожидающий поток, если блокирующий поток не заблокирован?
У меня есть основной поток и дочерний поток, которые оба работают с одним и тем же фрагментом данных. По большей части я использую std::barrier, чтобы синхронизировать эти два потока и гарантировать, что один поток не читает данные, пока другой записывает. Однако есть одно место, где дочерний поток запускает цикл std::for_each(std::execution::par_unseq), который считывает данные и выполняет некоторые тяжелые вычисления, в то время как основной поток выключен и выполняет свои собственные действия. вещь, не касающаяся данных, за исключением одного места, где они могут или не могут записывать некоторые данные.
Я хотел бы иметь возможность приостанавливать все чтения в потоках, когда основной поток запись, но я не хочу, чтобы каждое чтение в потоках блокировало любое другое чтение, если запись не происходит.
Я не знаю, сколько потоков for_each мог отделиться, поэтому я не могу использовать здесь барьер, да и не хочу, поскольку не хочу ждать, если чтение не произойдет. Это несложно сделать с циклом занятости, но мне сказали, что использование цикла занятости в многопоточном коде является плохим тоном, и что эти ожидания std приостанавливают потоки и отправляют сигналы на уровне ОС.
Подробнее здесь: https://stackoverflow.com/questions/788 ... ut-locking
Есть ли способ дождаться разблокировки мьютекса (или аналогичного объекта), не блокируя его после этого? ⇐ C++
Программы на C++. Форум разработчиков
1722748262
Anonymous
Другими словами, есть ли способ получить «обратную» переменную условия, которая будет блокировать ожидающий поток до тех пор, пока блокирующий поток не снимет блокировку, но не блокировать ожидающий поток, если блокирующий поток не заблокирован?
У меня есть основной поток и дочерний поток, которые оба работают с одним и тем же фрагментом данных. По большей части я использую std::barrier, чтобы синхронизировать эти два потока и гарантировать, что один поток не читает данные, пока другой записывает. Однако есть одно место, где дочерний поток запускает цикл std::for_each(std::execution::par_unseq), который считывает данные и выполняет некоторые тяжелые вычисления, в то время как основной поток выключен и выполняет свои собственные действия. вещь, не касающаяся данных, за исключением одного места, где они могут или не могут записывать некоторые данные.
Я хотел бы иметь возможность приостанавливать все чтения в потоках, когда основной поток запись, но я не хочу, чтобы каждое чтение в потоках блокировало любое другое чтение, если запись не происходит.
Я не знаю, сколько потоков for_each мог отделиться, поэтому я не могу использовать здесь барьер, да и не хочу, поскольку не хочу ждать, если чтение не произойдет. Это несложно сделать с циклом занятости, но мне сказали, что использование цикла занятости в многопоточном коде является плохим тоном, и что эти ожидания std приостанавливают потоки и отправляют сигналы на уровне ОС.
Подробнее здесь: [url]https://stackoverflow.com/questions/78830125/is-there-a-way-to-wait-for-a-mutex-or-similar-object-to-unlock-without-locking[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия