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

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

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

future cannot be sent between threads safely

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

33 ответов

135 просмотров
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 поинта ты обращаешься к нему с другого потока

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
4
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта