相关疑难解决方法(0)

ReadOnlyCollection <T>线程安全

ReadOnlyCollection(T)的文档指出:

A ReadOnlyCollection(Of T)只要不修改集合,就可以同时支持多个读者.即便如此,通过集合枚举本质上不是一个线程安全的过程.为了在枚举期间保证线程安全,您可以在整个枚举期间锁定集合.要允许多个线程访问集合以进行读写,您必须实现自己的同步.

我的问题是关于粗体部分:

  1. 为什么枚举通过一个本质上不是线程安全的集合
  2. 有什么可能的影响,和
  3. 什么是常用的解决方法?

.net concurrency multithreading immutability thread-safety

9
推荐指数
1
解决办法
2498
查看次数

这个无锁的.NET队列线程安全吗?

我的问题是,下面包含的类对于单读者单编写器队列类线程安全吗?这种队列称为无锁,即使队列已填满也会阻塞.数据结构的灵感来自Marc Gravell在StackOverflow 上实现的阻塞队列.

结构的要点是允许单个线程将数据写入缓冲区,而另一个线程则读取数据.所有这些都需要尽快发生.

Herb Sutter在DDJ文章中描述了类似的数据结构,但实现是在C++中.另一个区别是我使用了一个vanilla链表,我使用了一个链表的数组.

我不是仅仅包含一段代码,而是将所有内容与允许的开源许可证(MIT许可证1.0)一起包含,以防任何人发现它有用,并且想要使用它(原样或修改).

这与Stack Overflow上有关如何创建阻塞并发队列的其他问题有关(请参阅在.NET中创建blockinq队列在.NET中创建线程安全阻塞队列).

这是代码:

using System;
using System.Collections.Generic;
using System.Threading;
using System.Diagnostics;

namespace CollectionSandbox
{
    /// This is a single reader / singler writer buffered queue implemented
    /// with (almost) no locks. This implementation will block only if filled 
    /// up. The implementation is a linked-list of arrays.
    /// It was inspired by the desire to create a non-blocking version 
    /// of the …
Run Code Online (Sandbox Code Playgroud)

.net c# algorithm multithreading data-structures

6
推荐指数
1
解决办法
7634
查看次数

将.NET类库转换为多线程.NET类库的最佳实践

我有一些C#类库,它们的设计没有考虑并发,多线程,锁等等......

代码结构非常好,易于扩展,但它可以从多线程中受益匪浅:它是一组科学/工程库,需要在非常短的时间内执行数十亿次计算(现在它们不会带来好处从可用的核心).

我想将所有这些代码转换为一组多线程库,但我不知道从哪里开始,我没有任何以前的经验.

我可以使用任何可用的帮助,以及任何建议/建议.

.net c# multithreading class-library

5
推荐指数
2
解决办法
3732
查看次数

两个线程如何以最小的阻塞访问公共缓冲区数组?(C#)

我正在处理一个图像处理应用程序,我的主线程上有两个线程:

1 - CameraThread,用于捕获网络摄像头中的图像并将其写入缓冲区

2 - ImageProcessingThread,从该缓冲区获取最新图像进行过滤.

这是多线程的原因是因为速度是至关重要的,我需要让CameraThread继续抓取图片并使ImageProcessingThread在处理上一张图像时准备好接收最新的捕获.

我的问题是找到一种快速且线程安全的方式来访问公共缓冲区,我认为理想情况下,它应该是一个三重缓冲区(图像[3]),这样如果ImageProcessingThread很慢,那么CameraThread可以继续写在另外两个图像上,反之亦然.

什么样的锁定机制最适合这种线程安全?

我查看了锁定语句,但似乎它会使一个线程阻塞 - 等待另一个完成,这将是三重缓冲点.

提前感谢任何想法或建议.

J.

c# multithreading locking buffering

3
推荐指数
1
解决办法
1995
查看次数