.net 中的无锁构造
我是 .net 的新手,想知道 .net 是否有 AtomicInteger、ConcurrentLinkedQueue 等的 java 等效项?
我做了一些搜索,但找不到任何结果。
无锁算法需要某种 CAS 指令,该指令是通过 Java 中未记录的 Unsafe 类提供的,.net 有等效的东西吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
.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.
我在 .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
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
有关信息,很可能(此处) .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.这是我在 .net 的 Interlocked 类中看到的问题。
我有多个线程更新计数器。
每个线程必须获得唯一的计数器值,因此任何线程都不能获得相同的值。
.net 中互锁类的工作方式,我
现在已经做到了,因为两个线程都可以看到相同的计数器值,所以它们都可以获得相同的 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 -
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.