locking相关内容

在 Java 中,我可以依靠引用分配是原子的来实现写入时复制吗?

如果我在多线程环境中有一个未同步的 java 集合,并且我不想强制集合的读取器同步[1],那么我可以同步写入器并使用引用赋值的原子性可行吗?比如: 私有集合 global = new HashSet();//在此之后开始线程无效 allUpdatesGoThroughHere(对象示例操作数){//我的假设是这可以防止块中的操作被重新排序同步(全局){集合副本 = new HashSet(glo ..
发布时间:2022-01-22 20:03:20 Java开发

为什么在 Java 中双重检查锁定被破坏?

这个问题与旧 Java 版本的行为和双重检查锁定算法的旧实现有关 较新的实现使用volatile 并依赖于稍微改变的 volatile 语义,因此它们没有损坏. 声明字段分配始终是原子的,除了 long 或 double 字段. 但是,当我读到为什么双重检查锁定被破坏的解释时,据说问题在于赋值操作: //损坏的多线程版本//“双重检查锁定"成语类Foo {私人助手 helper ..
发布时间:2022-01-22 19:55:39 Java开发

如何通过钥匙获得锁

在不锁定整个集合的情况下,防止同时更新键值集中的一条记录的最佳方法是什么?从语义上讲,我正在寻找某种按键锁定(理想情况下,Java 实现,但不一定): 接口 LockByKey {无效锁(字符串键);//获取一个键的独占锁无效解锁(字符串键);//释放一个键的锁} 此锁旨在同步对远程存储的访问,因此不能选择某些同步的 Java 集合. 解决方案 Guava 在 13.0 中发布了类似的 ..
发布时间:2022-01-22 19:49:42 Java开发

C# 中各种线程同步选项有什么区别?

谁能解释一下两者的区别: 锁定(某个对象){} 使用互斥锁 使用信号量 使用监视器 使用其他 .Net 同步类 我就是想不通.在我看来,前两个是一样的? 解决方案 好问题.我可能错了..让我试试..我的原始答案的修订版#2..有了更多的理解.感谢您让我阅读:) 锁(obj) 是一个用于(对象内?)线程同步的 CLR 构造.确保只有一个线程可以获取对象的锁的所 ..
发布时间:2022-01-22 19:49:23 C#/.NET

lock() 是否保证按请求的顺序获得?

当多个线程请求同一个对象上的锁时,CLR 是否保证将按照它们被请求的顺序获取锁? 我写了一个测试看看这是不是真的,它似乎表明是的,但我不确定这是否是确定的. 类 LockSequence{私有静态只读对象 _lock = new object();私有静态日期时间_dueTime;公共静态无效测试(){var states = 新列表();_dueTime = DateTime.N ..
发布时间:2022-01-22 19:48:41 C#/.NET

C中的非忙阻塞队列实现

我正在尝试在 C 中实现一个队列,它会导致进程不忙地等待,直到队列中有一个元素可以使用.我尝试了两种不同的方法来实现这一目标. 我遇到的第一个问题是入队/出队操作是否有 if 条件来检查边界(if(q->count == QUEUESIZE)),对 sem_wait 的调用将立即返回,因为没有其他进程获得锁. 如果我将条件更改为 while(q->count == QUEUESIZE) ..
发布时间:2022-01-21 12:25:46 其他开发

让一个线程进入休眠状态,直到另一个线程解决了某个条件

这里有两段代码完成(我认为是)同样的事情. 我基本上是在尝试学习如何使用 Java 1.5 的并发来摆脱 Thread.sleep(long).第一个示例使用 ReentrantLock,第二个示例使用 CountDownLatch.我想要做的主要是让一个线程进入睡眠状态,直到另一个线程解决了一个条件. ReentrantLock 为我用来决定是否唤醒另一个线程的布尔值提供一个锁,然后 ..

当另一个线程可能设置它(最多一次)时,可以读取共享布尔标志而不锁定它吗?

我希望我的线程更优雅地关闭,所以我尝试实现一个简单的信号机制.我不认为我想要一个完全事件驱动的线程,所以我有一个工作人员可以使用关键部分 Monitor 优雅地停止它(相当于 C# lock我相信): 绘图线程.h 类 DrawingThread {布尔停止请求;Runtime::Monitor CSMonitor;CPInfo *pPInfo;//更多的..} 绘图线程.cpp vo ..
发布时间:2022-01-19 17:01:09 C/C++开发

Jenkins - java.lang.IllegalArgumentException:最后一个单元没有足够的有效位 &Gradle 错误:在根项目中找不到任务“null"

Jenkins 2.176.4-3 滚动 Gradle 4.3.1 问题区域:并行运行给定的单个 Gradle任务(或者它可以是任何简单的操作)和strong> 尤其是在运行基于 Jenkinsfile 的管道的并发运行时 我突然在 Jenkins 日志页面中收到此错误,以前从未见过此错误(在 Jenkins 中也没有发现有关此错误的 stackoverflow 帖子). ..

锁定 Linux 串口

我有一个关于 Linux 串行端口的问题正在尝试解决.我可以很好地打开、读取和关闭端口.但是,我想确保在任何给定时间我都是唯一从端口读取/写入的人. 在我调用 open() 函数后,我认为这已经为我完成了.但是,我可以在程序的同一个端口上多次调用 open().我也可以有两个线程同时从同一个端口读取. 我尝试用flock() 解决这个问题,但我仍然遇到同样的问题.是因为两个系统调用都来 ..
发布时间:2022-01-18 14:26:43 服务器开发

在 Linux 中锁定串行端口和其他设备的最佳做法是什么?

目标是“锁定"对串行设备或其他 Linux 设备的访问,以确保在设备正在使用时对其进行独占访问.例如,这可以防止两个程序同时打开同一个串行设备并“竞争"从该设备读取字节. 建议使用 SYSV 样式的 UUCP 设备锁定文件,例如 /var/lock/LCK..ttyS1.这就是 Linux Serial HOWTO: Locking Out Others.文件系统层次标准中也记录了它.由 g ..
发布时间:2022-01-18 14:16:19 服务器开发

FOR UPDATE OF 和 FOR UPDATE 的区别

当我使用 FOR UPDATE OF SAL 或简单地编写 FOR UPDATE 时有什么不同. 根据 O'Reilly FOR UPDATE 子句的 OF 列表不限制您更改仅列出那些列.锁仍然放置在所有行上;的清单只是为您提供了一种更清楚地记录您打算做什么的方法改变.如果您只是在查询中声明 FOR UPDATE 并且不包括OF 关键字后的一列或多列,则数据库将锁定 FROM 子句中列 ..
发布时间:2022-01-17 20:55:20 数据库

分块更新 MySQL 表

我正在尝试使用 c 更新 MySQL InnoDB 表.1 亿行.查询需要将近一个小时,这不是问题. 但是,我想将此更新拆分为更小的块,以免阻塞表访问.此更新不必是孤立的事务. 同时,更新的拆分在额外开销方面不应该太昂贵. 我考虑在使用的过程中循环遍历表格: UPDATE TABLENAME SET NEWVAR=限制批量大小,偏移量, 但是 UPDATE 在 MySQL 中 ..
发布时间:2022-01-17 20:32:29 数据库

如何在并发访问时标记表中的某些行

我们的应用程序有一个名为 cargo_items 的表.它可以被看作是一种稍后处理这些项目的队列.最初有一个 SINGLE 作业,它需要 3000 个条目并一个接一个地处理它们.后来,有人决定启动同一工作的其他 3 个实例.发生的事情很明显,许多项目被处理了两次. 如果同时运行许多实例,我的工作是使这些进程正常工作.我现在要做的解决方案是用 job_id 标记数据库中的 3000 个条目,然 ..
发布时间:2022-01-17 20:15:20 其他开发

为什么原子语句需要锁定提示?

问题 对下面的语句加锁有什么好处? 同样,如果我们不包含这些提示,我们会​​看到什么问题?即,它们是否会阻止竞争条件、提高性能或其他什么?问他们是否包括在内是为了防止一些我没有考虑过的问题,而不是我假设的竞争条件. 注意:这是此处提出的问题的溢出:SQLFIFO 队列的 Threadsafe UPDATE TOP 1 问题陈述 与 nextRecordToProcess ..
发布时间:2022-01-16 23:26:48 其他开发

取排他锁的正确方法

我正在编写一个程序来协调实时数据库上的最终事务.我正在做的工作不能作为集合操作完成,所以我使用了两个嵌套游标. 当我为每个客户端进行协调时,我需要在事务表上使用排他锁,但我想释放锁并让其他人在我处理的每个客户端之间运行他们的查询. 我很想在行级别而不是表级别上进行排他锁,但是 我到目前为止所读到的内容 说如果其他事务在 READCOMMITED 隔离级别(这是为我准备的)运行,我不能使 ..
发布时间:2022-01-16 23:07:54 数据库

如何找出是什么锁定了我的表?

我有一个 SQL 表突然无法返回数据,除非我在末尾包含 with (nolock),这表明我的表上留下了某种锁. 我已经对 sys.dm_tran_locks 来识别表上实际上有许多锁,但是我如何识别什么 正在锁定它们(即 sys.dm_tran_locks)? 编辑:我知道 sp_lock 用于 SQL 2005 之前的版本,但现在该 sp 已被弃用,AFAIK 正确的方法是使用 s ..

屏幕方向锁定

是否有可靠的方法在所有 Android 设备上锁定屏幕方向?下面的代码适用于我的 Nexus S 和其他手机,但由于某种原因,ROTATION_90 对应于 Xoom 上的 SCREEN_ORIENTATION_REVERSE_PORTRAIT. 有没有办法可靠地将旋转映射到方向? private void lockScreenOrientation() {如果(!mScreenOrien ..
发布时间:2022-01-16 13:55:52 移动开发