cost 434 ms
联锁和线程安全的操作 - Interlocked & Thread-Safe operations

1.出于好奇,当同时从 2 个或 3 个线程调用时,像下面这样的操作在幕后做了什么? C# 是否创建了一个内部队列,例如告诉线程 2,现在轮到您执行操作,然后它告诉线程 1 现在轮到您执行操作,然后线程 3 执行操作? 这样他们就不会互相干扰了? 2.为什么C#不自动执行这个过程? 当 ...

在多线程应用程序中同步属性值的正确方法 - Proper way to synchronize a property's value in a multi-threaded application

我最近开始重新审视我的一些旧的多线程代码,并想知道它是否安全且正确(生产中还没有问题......)。 特别是我是否正确处理对象引用? 我已经阅读了大量使用简单原语(如整数)的示例,但与引用和任何可能的细微差别有关的例子并不多。 首先,我最近了解到对象引用分配是原子的,至少在 64 位机器上,这是我 ...

如何为 WaitOnAddress / WakeByAddressSingle 使用互锁变量? - How to use interlocked variable for WaitOnAddress / WakeByAddressSingle?

最近我了解了 WaitOnAddress、WakeByAddressSingle 和 Interlocked* 函数系列。 在将测试代码作为理解过程的一部分时,我遇到了 C28112 警告。 以下代码是生成 C28112 警告的测试代码。 下面两行是“accessing interlocked v ...

给定一个可以停止和启动的外部生产者 API,当本地缓冲区已满时有效地停止生产者 - Given an external producer API that can be stopped and started, efficiently stop the producer when local buffer is full

假设我获得了一个事件生成器 API,它由Start() 、 Pause()和Resume()方法以及一个ItemAvailable事件组成。 生产者本身是外部代码,我无法控制它的线程。 在调用Pause()后,一些项目可能仍会通过(生产者实际上是远程的,因此项目可能已经在 .network 上运行) ...

对于更新不依赖于先前值的不可变集合,是否有任何理由更喜欢 Interlocked 而不是 volatile? - Is there any reason to prefer Interlocked over volatile for an Immutable Collection where updates do not depend on previous values?

我注意到在讨论不可变 collections 的问题(例如,更新对不可变 object 的引用的首选方法是什么? )建议使用Interlocked (或更好的ImmutableInterlocked )。 原因似乎是 CAS,因为在大多数情况下,不可变集合会根据其先前的值进行更新。 但是,假设我有 ...

可以在这个多线程循环实现中正确使用 Interlocked CompareExchange 吗? - Can Interlocked CompareExchange be used correctly in this multithreaded round-robin implementation?

由于多线程上下文中的某些速率限制,我需要在 N 个不同连接之间循环一些调用。 我决定使用一个列表和一个“计数器”来实现这个功能,它应该在每次调用的实例之间“跳一个”。 我将用一个最小的例子来说明这个概念(使用一个名为 A 的 class 来代替连接) 这按预期工作,因为它确保调用在连接之间是循环的 ...

Intellocked.Exchange 而不是 ReaderWriterLockSlim - Intelocked.Exchange instead of ReaderWriterLockSlim

在多线程应用程序中,我有一个由多个线程访问的字典,用于获取特定键的值。 还有一种使用 Quartz.Net 的机制来更新这个字典。 我正在尝试找到使更新后的字典可用于以线程安全方式阅读的最佳方法。 最初,我将 ReadWriterLockSlim 视为一种解决方案,但当我搜索可能的性能损失时,我可 ...

InterlockedExchange 是否应该用于变量的所有设置? - Should InterlockedExchange be used on all setting of a variable?

我在 Windows 中使用 InterlockedExchange 并且我有两个问题放在一起基本上是我的标题问题。 InterlockedExchange 使用 LONG 类型(32 位)。 根据 Microsoft 的文档互锁变量访问: “对 32 位变量的简单读取和写入是没有 Interl ...

CS8625 无法将空文字转换为 Interlocked.Exchange(ref c, null) 的不可空引用类型警告 - CS8625 Cannot convert null literal to non-nullable reference type warning for Interlocked.Exchange(ref c, null)

以下代码在 .NET core 3.1 中正常工作,但错误地生成警告CS8625 无法将空文字转换为不可为空的引用类型: 如果它适用于object? ,它也应该适用于class2? . ...

Interlocked.CompareExchange 的返回值是否有充分的理由 - Is there some good reason for the return value of Interlocked.CompareExchange

Interlocked.CompareExchange()方法( docs )粗略地说是这样的: “我有一个变量,我想我知道它当前具有什么值。如果我是对的,那么请将值更改为那个”。 关键是此方法可用于在多线程上下文中安全地更新变量。 如果在调用者认为它知道值是什么之后值发生了变化,那么其他一些线 ...

Interlocked.CompareExchange 单线程等效代码 - Interlocked.CompareExchange single-threaded equivalent code

我不知道为什么,但我似乎无法完全理解Interlocked.CompareExchange(ref int a, int b, int c)发生的事情。 如果它只是在单线程环境中天真地实现,有人可以告诉我它会做什么吗? 即它用“做那个......但是作为一个原子的、线程安全的操作”来代替什么代码 ...

基于 CompareExchange 的联锁实现是否应该使用 SpinWait? - Should interlocked implementations based on CompareExchange use SpinWait?

下面是一个基于Interlocked.CompareExchange的互锁方法的实现。 是否建议此代码在重复之前使用SpinWait旋转? 我已经看到在这种情况下使用了SpinWait ,但我的理论是它应该是不必要的。 毕竟,循环只包含少量指令,并且总是有一个线程在进行。 假设两个线程竞相执行此方 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM