172 похожих чатов

Есть объект, функция заимствует ссылку на него, оборачивает в Arc<Mutex>, в цикле клонирует

ссылку и передаёт в новый тред,
после цикла ждёт все треды (через хендлеры).
ошибка: thread::spawn(move
lifetime `'static` required
советует 'static, добавил,
получил: borrowed value does not live long enough
вопрос: а как надо?)

29 ответов

18 просмотров

код дай, на словах непонятно что ты делаешь

можешь просто код цикла, необязательно его менять чтобы он заработал в плейграунде, скорее всего так решим

Пересылка в другой тред через std’шный thread::spawn требует ’static Ты не можешь не ’static ссылки так отправлять в другой тред. Либо стирай лайфтайм, либо юзай scoped-треды из crossbeam.

Ярослав-Нестеров Автор вопроса
Dmytro Polunin
код дай, на словах непонятно что ты делаешь

вызов функции, которая зхапускает и ждёт треды

Ярослав-Нестеров Автор вопроса
Dmytro Polunin
код дай, на словах непонятно что ты делаешь

сама функция, заимствующая ссылку на image

Ярослав Нестеров
screenshot сама функция, заимствующая ссылку на image

как ты заслонил пальцем часть скриншота?

Ярослав Нестеров
screenshot сама функция, заимствующая ссылку на image

я бы вместо &RgbaImage, &BitMap передавал и хранил бы везде Arc<Mutex<RgbaImage>>, Arc<Mutex<BitMap>>, не делай никогда Arc<Mutex<&T>>

Ярослав Нестеров
screenshot ))))

хороший скоуп, да

Ярослав-Нестеров Автор вопроса
Dmytro Polunin
я бы вместо &RgbaImage, &BitMap передавал и хранил...

так он потом ругается, что я не могу вернуть bitmap или нет...

Ярослав Нестеров
screenshot ))))

ыыы, но та часть с потоками выглядит как велосипед. Если число строк известно, то не нужно считать хендлы, надо запланировать всё заранее

Ярослав Нестеров
спать и чекать счётчик?

да, типа не понятно зачем ты так сделал

Alex Noname
и какой-то rayon возможно впридачу.

я тоже стал смотреть на rayon, но у него через глобалки. а тут нужен локальный тредпул

Ярослав-Нестеров Автор вопроса
Ярослав Нестеров
screenshot вызов функции, которая зхапускает и ждёт треды

стоп, а мне не нужна image_in больше, могу отдать её насовсем

Ярослав Нестеров
screenshot сама функция, заимствующая ссылку на image

image в Arc нет смысла ложить, можно сразу ссылки раскидывать ну и https://docs.rs/crossbeam/0.8.1/crossbeam/thread/index.html

Roman
я тоже стал смотреть на rayon, но у него через гло...

ок, я просто только с темы сисек подключился, надо прокрутить вначало =)

Ярослав-Нестеров Автор вопроса
Alex Noname
да, типа не понятно зачем ты так сделал

показалось, что спать и чекать счётчик это костыльнее, чем джоиниться к хендлерам)

Ярослав-Нестеров Автор вопроса
Ярослав Нестеров
screenshot сама функция, заимствующая ссылку на image

тогда другой вопрос, как вернуть из функции Bitmap, который в Arc(Mutex())?

Ярослав-Нестеров Автор вопроса
Ярослав Нестеров
screenshot сама функция, заимствующая ссылку на image

короче заработало только прокидывая Arc<Mutex<Bitmap>> в функцию. не так элегантно как я хотел, зато работает.

Ярослав Нестеров
тогда другой вопрос, как вернуть из функции Bitmap...

https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.try_unwrap он тебе про этот метод говорил

Ярослав Нестеров
короче заработало только прокидывая Arc<Mutex<Bitm...

А еще и от Arc можно уйти, если воспользоваться crossbeam scope. Только он сам раскидает треды, так что параметр num threads уйдет: extern crate crossbeam_utils; use std::sync::Mutex; fn main() { use crossbeam_utils::thread; let v = Mutex::new(vec![1, 2, 3]); let handle = &v; thread::scope(|s| { for i in 0..3 { s.spawn(move |_| { handle.lock().unwrap()[i] += 1; }); } }).unwrap(); dbg!(v); } (подскажите, можно ли убрать этот handle, чет у меня мозги не варят под конец дня)

Ярослав Нестеров
screenshot сама функция, заимствующая ссылку на image

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

Roman
еще у тебя очень сильная зависимость от лока на bi...

тогда у тебя будет вот так: 1. для каждой строки 2.1 запустить scope для генерации границы строки 2.2 положить результат в очередь с индексом строки 3. пробежаться по очереди и сделать dst.set_line без арков, мьютексов и проч проч.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта