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

Всем привет 👋 Зачада со свездойчкой.... У меня не компилится... Хотя в

расту давненько. Не могу понять с фига ли до меня компилятор докопался 🤦‍♂️😡

future cannot be sent between threads safely

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=3c749ffecb986059c39af316121ad06b

33 ответов

139 просмотров
Stanislav-Sagan Автор вопроса

Пока ре расскоментировать спавн потока (там тудушка)

Там написано, где нужно раскоменнтировать чтобы сломать

Санек Каравайчик
Там написано, где нужно раскоменнтировать чтобы сл...

Rc нельзя между потоками передавать, а tokio::spawn потенциально может запустить эту фьючу в другом потоке. Нужен spawn_local какой-то. Если заменить на tokio::task::spawn_local, то компилится.

Stanislav-Sagan Автор вопроса
Alexander Ruliov
Rc нельзя между потоками передавать, а tokio::spaw...

Дело в том что я и не передаю Rc через потоки....

Stanislav Sagan
Дело в том что я и не передаю Rc через потоки....

SomeStruct хранит в себе Rc Токио может воркстилить тасочки, поэтому футура и её составляющие должны быть Send

mental stability🥺✨
SomeStruct хранит в себе Rc Токио может воркстилит...

Ты имеешь ввиду где queue и map? Там в объявлении Rc указаны, больше я их нигде не нашел

Stanislav-Sagan Автор вопроса
mental stability🥺✨
SomeStruct хранит в себе Rc Токио может воркстилит...

Что такое воркстилить? Давай я чуть перепишу код... Создать Rc нет проблем. А вот воспользоваться им не могу (( https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=60627dee402dcc141897a37d69aeb54d

mental stability🥺✨
Какая разница? Структура не Send

Это можно решить через LocalSet в Токио, либо убрать Rc

mental stability🥺✨
Какая разница? Структура не Send

Я думал что если все объекты внутри структуры имплементят send, то и структура тоже является send по умолчанию

mental stability🥺✨
Ну да

А в структуре используются Rc, значит она как раз не Send, в ней надо все на Arc

Stanislav Sagan
Что такое воркстилить? Давай я чуть перепишу код...

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

Stanislav-Sagan Автор вопроса
Stanislav Sagan
А как код поправить чтоб он работал?

Rc/Arc Либо спавнить в локалсете. Как им пользоваться есть в документации токио

Stanislav-Sagan Автор вопроса
mental stability🥺✨
Rc/Arc Либо спавнить в локалсете. Как им пользоват...

https://docs.rs/tokio/latest/tokio/task/struct.LocalSet.html А, о, спасибо))) Как раз мой случай))

Stanislav-Sagan Автор вопроса

Хотя не, я не кидаю Rc в async move как в примере... у меня все локально используется...

Stanislav Sagan
Хотя не, я не кидаю Rc в async move как в примере....

Ещ раз. Твоя структура не Send, так как вложенное в неё поле !Send Отсюда вытекает что вся твоя футура не Send, поэтому такую футуру перемещать нельзя. Тут не влияет, муваешь ты Rc внутрь или нет

Stanislav-Sagan Автор вопроса
mental stability🥺✨
Ещ раз. Твоя структура не Send, так как вложенное ...

Та вот это и не понимаю. Что я ее никуда не муваю.. а ругается что она не Send

Stanislav Sagan
Та вот это и не понимаю. Что я ее никуда не муваю....

Ты не муваешь, а токио внутри себя может мувнуть

mental stability🥺✨
Ты не муваешь, а токио внутри себя может мувнуть

Смотри, у тебя 2 таски в одном треде. По очереди складывают счетчик - ок Как только токио считает, что твой тред слишком загруженный, другой тред крадёт 1 таску. Теперь они параллельно начинают прибавлять счетчик. Так как он не атомарный, то может случится одновременный инкремент, то UB.

Stanislav-Sagan Автор вопроса
mental stability🥺✨
Смотри, у тебя 2 таски в одном треде. По очереди с...

Ну у меня select уже даже отдельно, some_struct отдельно....

Stanislav Sagan
screenshot Ну у меня select уже даже отдельно, some_struct о...

В общем, убирай SomeStruct из футуры Или меняй Rc на Arc

Stanislav-Sagan Автор вопроса
mental stability🥺✨
Смотри, у тебя 2 таски в одном треде. По очереди с...

Я даже мутабельные сслыки в select засовываю без проблем... а тут Rc какой-то не понравился

Stanislav Sagan
Я даже мутабельные сслыки в select засовываю без п...

Растбук читать лучше надо было, там об этом точно глава есть Ещё на cheats.rs написано про Send/Sync

Stanislav-Sagan Автор вопроса

https://stackoverflow.com/questions/74497663/why-does-rc-works-in-async-fn не понятно

Stanislav Sagan
screenshot Ну у меня select уже даже отдельно, some_struct о...

tokio::select! это макрос который раскроется c .await внутри. Когда происходит .await твоя таска отдаётся экзекьютору, который в следующий раз может отправить её исполнятся на другом потоке. А у тебя между await поинтами непотокобезопасный Rc счётчик. Представь что ты куда то его отправил до .await поинта, а потом после .await поинта ты обращаешься к нему с другого потока

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта