своём понимаении трейта Send. Я не могу понять, зачем он как бы на самом деле. Ну запрещаю я пересылать данные между потоками, а зачем мне запрещать?
И я не могу понять этот текст:
The Send marker trait indicates that ownership of the type implementing Send can be transferred between threads. Almost every Rust type is Send, but there are some exceptions, including Rc<T>: this cannot be Send because if you cloned an Rc<T> value and tried to transfer ownership of the clone to another thread, both threads might update the reference count at the same time. For this reason, Rc<T> is implemented for use in single-threaded situations where you don’t want to pay the thread-safe performance penalty.
А то у меня есть футура, в ней данные, а футура вызывается различными потоками, иными словами, с данными работают различные потоки, но при этом в одно время с ними работает лишь один поток(не в значении MutexLock, а в занчении что футура выполняется одним потоком и никакой другой поток этими данными в данный момент не располагает). И должны ли эти данные быть Send?
представь что у тебя есть нативная библиотека в которой есть синглтон объект который работает только в треде который его создал. Типикал сишная параша. И ты берешь и отдаешь её в другой поток. И оно фигак и разваливается. Чтобы этого не происходило есть проверка времени компиялции трейтом Send
Твоя футура — Sync.
Обсуждают сегодня