热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Synctrait是Sendtrait的严格子集吗?什么实现同步而不发送?

在JimBlandy、JasonOrendorff、LeonoraFSTindall的“ProgrammingRust,第2版”中,第

在Jim Blandy、Jason Orendorff、Leonora FS Tindall 的“Programming Rust,第 2 版”中

第 520 页有一个图表显示了发送和同步,其中重叠圆圈中的同步完全包含在发送中。

这让我相信所有实现同步的东西也必须实现发送,但是这个来自第 561 页的例子和我看到的所有东西总是分别指定它们,

type GenericError = Box

为什么如果实现 Sync 的东西 100% 也是 Send,那么 Sync 不是 Send 的子特性吗?为什么 trait bound 需要同时指定两者?为什么人们都标记两者。有什么用例可以同步而不是发送吗?在什么情况下,您可以与另一个线程共享可变引用,但不能将所有权授予该另一个线程吗?

回答

这本书似乎是错误的。之间的唯一关系Send,并SyncTSync当且仅当&TSend(这是有道理的,因为“同步”跨线程其实只是能够在线程之间共享对它的引用)。事实上,标准库中甚至还有一种类型,Sync但不是Send: MutexGuard。原因是当尝试从锁定互斥锁的线程以外的线程解锁互斥锁时,底层实现会导致未定义的行为。






推荐阅读
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 在Java编程中,构造方法是创建对象的关键步骤。通过new关键字调用构造器时,虽然构造器会返回该类的对象,但对象的创建过程涉及多个步骤。本文将详细解释构造方法的工作原理,并探讨this和static关键字的使用场景及其特性。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ... [详细]
  • Tornado框架中模块与静态文件的应用
    本文详细介绍了Tornado框架中模块和静态文件的使用方法。首先明确模块与模板的区别,然后通过具体的代码示例展示如何在HTML文档中使用模块,并配置模块的路由。最后,提供了模块类中参数获取的示例。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 本文探讨了C语言和C++中大小写的处理方式,并详细介绍了如何在C++中实现不区分大小写的字符串比较。通过自定义`char_traits`类,可以灵活地处理字符的比较、复制和转换。 ... [详细]
  • 【刷题篇】Java 不用Math.sqrt() 如何求一个数的平方根
    题目:在不用Math.sqrt()方法中如何求解一个大于1的数的平方根题解一、牛顿迭代法计算x2n的解,令f(x)x2-n,相当于求解f( ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
author-avatar
zc43pml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有