热门标签 | 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。原因是当尝试从锁定互斥锁的线程以外的线程解锁互斥锁时,底层实现会导致未定义的行为。






推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 在Java中,当创建一个对象时,首先会为该对象的所有实例变量分配内存(前提是类已经加载),随后执行实例变量的初始化。接着,系统会按顺序执行静态初始化块、非静态初始化块以及构造器中的代码,确保对象的完整初始化。这一过程保证了对象的状态在创建时是正确且一致的。 ... [详细]
  • 在C#编程中,枚举是一种非常实用的数据类型,能够有效提高代码的可读性和维护性。本文详细探讨了枚举在实际开发中的多种应用场景,包括状态管理、配置选项和数据分类等,并通过具体示例展示了如何高效地使用枚举来简化代码逻辑。此外,还介绍了枚举的一些高级用法,如自定义属性和扩展方法,以进一步增强其功能和灵活性。 ... [详细]
  • 在Java程序设计中,实现高效的分页功能是提升应用性能的关键之一。本文介绍了通过使用 `PageController` 类来处理大数据集的分页操作,该类能够从一个较大的集合中提取出指定大小的小集合。具体实现中,通过优化数据访问和减少内存消耗,确保了分页操作的高效性和稳定性。此外,文章还探讨了分页算法的优化策略,包括缓存机制和懒加载技术的应用,以进一步提高系统的响应速度和用户体验。 ... [详细]
  • 在现代Web开发中,许多网站采用伪静态技术,如URL以.html或.shtml结尾,以提升用户体验和搜索引擎优化。MVC框架中的路由机制能够轻松实现这一功能。通过配置默认路由并添加伪静态路由规则,MVC框架按照从上到下的顺序进行路由匹配,确保请求被正确处理。此外,这种机制还支持灵活的自定义路由,进一步增强了应用的可扩展性和维护性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 本文详细介绍了 Java 中遍历 Map 对象的几种常见方法及其应用场景。首先,通过 `entrySet` 方法结合增强型 for 循环进行遍历是最常用的方式,适用于需要同时访问键和值的场景。此外,还探讨了使用 `keySet` 和 `values` 方法分别遍历键和值的技巧,以及使用迭代器(Iterator)进行更灵活的遍历操作。每种方法都附有示例代码和具体的应用实例,帮助开发者更好地理解和选择合适的遍历策略。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 深入理解Java中的多态性概念及其应用
    多态是面向对象编程中的三大核心特性之一,与封装和继承共同构成了面向对象的基础。多态使得代码更加灵活和可扩展,封装和继承则为其提供了必要的支持。本文将深入探讨多态的概念及其在Java中的具体应用,帮助读者全面理解和掌握这一关键知识点。 ... [详细]
  • 在Java基础中,私有静态内部类是一种常见的设计模式,主要用于防止外部类的直接调用或实例化。这种内部类仅服务于其所属的外部类,确保了代码的封装性和安全性。通过分析JDK源码,我们可以发现许多常用类中都包含了私有静态内部类,这些内部类虽然功能强大,但其复杂性往往让人感到困惑。本文将深入探讨私有静态内部类的作用、实现方式及其在实际开发中的应用,帮助读者更好地理解和使用这一重要的编程技巧。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
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社区 版权所有