Multithreading 在.Net的不同线程之间同步对象集合的最佳方法是什么?

Multithreading 在.Net的不同线程之间同步对象集合的最佳方法是什么?,multithreading,Multithreading,在.Net的不同线程之间同步对象集合的最佳方法是什么 我需要在线程安全模式下从不同线程访问列表或字典。通过添加、删除、foreach等操作,您可以实现无锁队列: 或者自己使用锁处理同步: 您可以实现无锁队列: 或者自己使用锁处理同步: Hashtable.Synchronized方法返回哈希表的同步(线程安全)包装 这也适用于其他集合。哈希表。Synchronized方法返回哈希表的同步(线程安全)包装 这也适用于其他集合。Net中的许多集合类都内置了对同步的支持,并使多线程的访问安全。

在.Net的不同线程之间同步对象集合的最佳方法是什么


我需要在线程安全模式下从不同线程访问列表或字典。通过添加、删除、foreach等操作,您可以实现无锁队列:

或者自己使用锁处理同步:


您可以实现无锁队列:

或者自己使用锁处理同步:


Hashtable.Synchronized方法返回哈希表的同步(线程安全)包装


这也适用于其他集合。

哈希表。Synchronized方法返回哈希表的同步(线程安全)包装


这也适用于其他集合。

Net中的许多集合类都内置了对同步的支持,并使多线程的访问安全。例如(在C++/CLR中):


您可以丢弃对不安全队列的引用,保留对安全队列的引用。它可以在线程之间共享,并保证线程安全访问。其他集合类,如ArrayList和Hashtable,也以类似的方式支持这一点。

在.Net中,许多集合类都内置了对同步和多线程访问的支持。例如(在C++/CLR中):


您可以丢弃对不安全队列的引用,保留对安全队列的引用。它可以在线程之间共享,并保证线程安全访问。其他集合类,如ArrayList和Hashtable,也以类似的方式支持这一点。

在不了解细节的情况下,我倾向于委托和事件来通知更改

以及实现观察者或发布-订阅模式


在不知道具体细节的情况下,我倾向于委托和事件来通知更改

以及实现观察者或发布-订阅模式


基本上,这取决于您需要使用的模式。 如果有多个线程在同一个位置写入和读取数据,则可以使用与单个线程(hastable、array等)相同的数据结构,并使用锁/监视器或ReaderWriterLock来防止争用情况。 如果需要在线程之间传递数据,则需要某种队列(同步或无锁),组A的线程将插入该队列,组B的线程将从中退出。您可能希望使用WaitEvent(自动重置或手动),以便在队列为空时不会丢失CPU。
这实际上取决于您想要实现什么样的工作流。

基本上取决于您需要使用的模式。 如果有多个线程在同一个位置写入和读取数据,则可以使用与单个线程(hastable、array等)相同的数据结构,并使用锁/监视器或ReaderWriterLock来防止争用情况。 如果需要在线程之间传递数据,则需要某种队列(同步或无锁),组A的线程将插入该队列,组B的线程将从中退出。您可能希望使用WaitEvent(自动重置或手动),以便在队列为空时不会丢失CPU。
这实际上取决于您想要实现什么样的工作流。

您可能需要更清楚地了解您在这里要做什么。关于队列或哈希表的响应可能适合您的问题,也可能不适合您的问题——根据您所说的,很难判断。对问题的粗略描述可能会让你得到更合适的答案。一个因素是您是否需要强类型的集合。您可能需要更清楚地了解您在这里要做什么。关于队列或哈希表的响应可能适合您的问题,也可能不适合您的问题——根据您所说的,很难判断。对问题的粗略描述可能会让你得到更合适的答案。一个因素是您是否需要集合是强类型的。

    Collections::Queue ^unsafe_queue = gcnew Collections::Queue();
    Collections::Queue ^safe_queue = Collections::Queue::Synchronized(unsafe_queue);