.net 中的无锁构造

发布于 2024-07-09 17:27:43 字数 178 浏览 8 评论 0 原文

我是 .net 的新手,想知道 .net 是否有 AtomicInteger、ConcurrentLinkedQueue 等的 java 等效项?

我做了一些搜索,但找不到任何结果。

无锁算法需要某种 CAS 指令,该指令是通过 Java 中未记录的 Unsafe 类提供的,.net 有等效的东西吗?

I am new to .net and would like to know whether .net has the java equivalent of AtomicInteger, ConcurrentLinkedQueue, etc?

I did a bit of search and couldnt come up with anything.

The lock free algorithms need some sort of a CAS instruction, which is provided through the undocumented Unsafe class in Java, does .net have anything equivalent?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

相守太难 2024-07-16 17:27:43

.NET 中有 Interlocked 类,具有静态方法 Interlocked.Increment() 和 Interlocked.Decrement()。

请参阅 http://msdn.microsoft.com/en-us/库/system.threading.interlocked.aspx

您还可以在 System.Threading 命名空间中找到其他原子同步构造。

In .NET there is the Interlocked class, with static methods Interlocked.Increment() and Interlocked.Decrement().

See http://msdn.microsoft.com/en-us/library/system.threading.interlocked.aspx.

You will also find other atomic och synchronization constructs in the System.Threading namespace.

羁绊已千年 2024-07-16 17:27:43

我在 .Net 中编写了大量无锁不可变集合结构。 这包括二叉树、映射、数组、链表等...源代码和二进制文件可在代码库

咆哮包

I've written a good deal of lock free immutable collection structures in .Net. This includes, binary trees, maps, arrays, linked list, etc ... The source and binaries are available on code gallery

RantPack

平安喜乐 2024-07-16 17:27:43

Interlocked 类具有执行简单原子操作(如递增、递减、比较、交换等)所需的所有静态方法。请查看 http://msdn.microsoft.com/en-us/library/system.threading.interlocked_members.aspx

对于大多数集合,您可以通过以下方式获取同步集合称为“Synchronized”的静态成员。 但请注意,这些不是无锁构造,它们只是隐藏了使用锁/信号量的混乱。 检查队列集合的同步方法http://msdn。 microsoft.com/en-us/library/system.collections.queue.synchronized.aspx

The Interlocked class has all the static methods needed to do simple atomic operations like increment, decrement, compare, swap, etc. Check out http://msdn.microsoft.com/en-us/library/system.threading.interlocked_members.aspx

For most collections you can get a synchronized collection through a static member called "Synchronized". Note however these aren't lock free constructs, they just hide the messiness of using locks/semaphores. Check the queue collection's synchronized method http://msdn.microsoft.com/en-us/library/system.collections.queue.synchronized.aspx

仙女山的月亮 2024-07-16 17:27:43

有关信息,很可能(此处) .NET 4.0 将从 并行扩展。 特别是,TPL 引入了一系列专为高级线程场景(使用最少的锁等)而设计的集合和其他构造。

目前,线程集合等的数量有限,加上通常的锁定基元,加上 Interlocked 等。

For info, it is likely (here) that .NET 4.0 will inherit the CCR/TPL from Parallel Extensions. TPL, in particular, introduces a range of collections and other constructs designed for advanced threading scenarios (with minimal locks etc).

For now, there are a limited number of threaded collections etc, plus the usual locking primatives, plus Interlocked, etc.

兔姬 2024-07-16 17:27:43

这是我在 .net 的 Interlocked 类中看到的问题。

我有多个线程更新计数器。
每个线程必须获得唯一的计数器值,因此任何线程都不能获得相同的值。

.net 中互锁类的工作方式,我

int counter;
void code(){
    myThreadVal = Interlocked.increment(counter);
}

现在已经做到了,因为两个线程都可以看到相同的计数器值,所以它们都可以获得相同的 myThreadVal 值。

然而,对于java的AtomicInteger来说,这种情况永远不会发生,每个线程总是会得到不同的值。

Here is the problem I see with .net's Interlocked class.

I have multiple threads updating a counter.
Each thread must get a unique value of the counter, thus no threads must get the same value.

The way the interlocked class in .net works, i have -

int counter;
void code(){
    myThreadVal = Interlocked.increment(counter);
}

now since both threads can see the same value of the counter, they both can get the same value of myThreadVal.

However, in the case of java's AtomicInteger that would never happen, each thread would always get a different value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文