AbstractQueuedSynchronizer Node文档翻译

2023-12-24 19:38

本文主要是介绍AbstractQueuedSynchronizer Node文档翻译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    一、概述  

 等待队列是“ CLH”(Craig,Landin和 Hagersten)锁定队列的变体。 CLH锁通常用于自旋锁。相反,我们使用它们来做阻塞同步器,但是使用相同的基本策略,即在其节点的前身中保存有关线程的某些控制信息。每个节点中的“状态”字段跟踪线程是否应阻塞。节点的前任释放时会发出信号。否则,队列的每个节点都充当特定通知样式的监视器,其中包含单个等待线程。虽然状态字段不控制线程是否被授予锁等。在队列中头节点线程可能会尝试获取,但是不能保证成功。 它仅授予竞争权。因此,当前被释放的竞争者线程可能需要重新等待。

      插入到CLH队列中,只需要对“尾巴”执行一次原子操作,因此存在一个简单的原子分界点,即从未排队到排队。同样,出队仅涉及更新“头”。但是,要确定节点的后继者是谁,需要花费更多的精力,部分原因是要处理由于超时和中断而可能导致的取消。

      “ prev”链接(在原始CLH锁中不使用)主要用于处理取消。如果取消某个节点,则其后继节点(通常)会重新链接到未取消的前任节点。有关自旋锁情况下类似机制的说明,请参见Scott和Scherer的论文,网址为http://www.cs.rochester.edu/u/scott/synchronization/。

      我们还使用“下一个”链接来实现阻塞机制。每个节点的线程ID都保留在其自己的节点中,因此前任通过遍历下一个链接以确定它是哪个线程,从而通知下一个节点唤醒。确定后继者必须避免与新排队的节点竞争来设置其前任节点的“ next”字段。在必要时,可以通过在节点的后继者似乎为空时从原子更新的“尾部”向后检查来解决此问题。 (或者换句话说,下一个链接是一种优化,因此我们通常不需要向后扫描。)

      取消将一些保守性引入了基本算法。由于我们必须轮询其他节点的取消,因此我们可能会遗漏一个被取消的节点在我们前面还是后面。要解决此问题,必须始终在取消合同时取消继任者,使他们能够稳定在新的前任身上,除非我们能够确定一个将要承担此责任的前任取消。

      CLH队列需要一个虚拟头节点节点才能开始。但是,我们不会在构建过程中创建它们,因为如果没有争用,这将是徒劳的。而是构造节点,并在第一次争用时设置头和尾指针。

      等待条件的线程使用相同的节点,但是使用附加的链接。条件只需要在简单(非并行)链接队列中链接节点,因为只有在专用时才可以访问它们。等待时,将节点插入条件队列。收到信号后,该节点将转移到主队列。状态字段的特殊值用于标记节点所在的队列。

二、属性

int waitStatus 表示节点的状态,包含的状态有 

状态含义
SIGNAL-1该节点的后继节点将要或者已经被阻塞,因此当前节点释放或取消时必须unpark其后继节点。为了避免竞争,acquire方法必须首先表明它们需要信号,然后重试原子获取,然后在失败时阻塞
CONDITION-2该节点当前在condition队列中。 在传输之前,它不会用作同步队列节点,那时状态将设置为0。(此处使用此值与字段的其他用途无关,但简化了机制)
PROPAGATE-3releaseShared应该传播到其他节点。在 doReleaseShared中设置了此设置(仅用于头节点),以确保传播继续进行,即使由于干预而进行的其他操作
CANCELLED1由于超时或中断,该节点被取消。 节点永远不会离开此状态。特别是具有取消节点的线程永远不会再次阻塞
 0表示当前节点在sync队列中,等待着获取锁
  • Node prev:链接到当前节点/线程用来检查waitStatus的先前节点。在入队期间分配,并且仅在出队时将其清空(出于GC的考虑)。同样,在取消前任后,我们会短路,同时找到一个未取消的前任,这将始终存在,因为根节点永远不会被取消:只有成功获取后,结点才变为根。取消的线程永远不会成功获取,并且线程只会取消自身,不会取消任何其他节点
  • Node next:链接到后继节点,当前节点/线程在释放时将其解散。在排队过程中分配,在绕过已取消的前辈时进行调整,在出队时清零(出于GC的考虑)。 enq操作直到附加后才分配前任的下一个字段,因此看到空的下一个字段并不一定意味着该节点位于队列末尾。但是,如果下一个字段显示为空,则我们可以从尾部扫描上一个以进行再次检查。被取消节点的下一个字段设置为指向节点本身而不是null,以使isOnSyncQueue的工作更轻松
  •  Thread thread:使该节点排队的线程。在构造时初始化,使用后置为空。
  •  Node nextWaiter:链接到等待条件的下一个节点,或者链接到特殊值SHARED。由于条件队列仅在以独占模式保存时才被访问,因此我们只需要一个简单的链接队列即可在节点等待条件时保存节点。然后将它们转移到队列中以重新获取。并且由于条件只能是互斥的,因此我们使用特殊值来表示共享模式来保存字段。

 

 

这篇关于AbstractQueuedSynchronizer Node文档翻译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532900

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

Python脚本:TXT文档行数统计

count = 0 #计数变量file_dirs = input('请输入您要统计的文件根路径:')filename = open(file_dirs,'r') #以只读方式打开文件file_contents = filename.read() #读取文档内容到file_contentsfor file_content in file_contents:

bcolz文档

原文:http://bcolz.blosc.org/en/latest/reference.html First level variables bcolz.__version__'''bcolz包的版本。''' bcolz.dask_here'''是否检测到dask的最低版本。''' bcolz.min_dask_version'''需要dask的最低版本(dask是可选

excel翻译软件有哪些?如何高效提翻译?

你是否曾在面对满屏的英文Excel表格时感到头疼?项目报告、数据分析、财务报表... 当这些重要的信息被语言壁垒阻挡时,效率和理解度都会大打折扣。别担心,只需3分钟,我将带你轻松解锁excel翻译成中文的秘籍。 无论是职场新人还是老手,这一技巧都将是你的得力助手,让你在信息的海洋中畅游无阻。 方法一:使用同声传译王软件 同声传译王是一款专业的翻译软件,它支持多种语言翻译,可以excel

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%