csharp ConcurrentQueue使用锁在旧的.NET项目中使用(如在Unity3D中)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp ConcurrentQueue使用锁在旧的.NET项目中使用(如在Unity3D中)相关的知识,希望对你有一定的参考价值。
using System;
using System.Collections.Generic;
namespace KanameExtensions {
public class ConcurrentQueue<T> {
//private vars
private readonly object syncLock = new object();
private Queue<T> rqueue;
//constructors
public ConcurrentQueue() {
rqueue = new Queue<T>();
}
public ConcurrentQueue(IEnumerable<T> collection) {
rqueue = new Queue<T>(collection);
}
public ConcurrentQueue(int capacity) {
rqueue = new Queue<T>(capacity);
}
//properties
public int Count {
get {
lock (syncLock) {
return rqueue.Count;
}
}
}
//methods
public void Clear() {
lock (syncLock) {
rqueue.Clear();
}
}
public bool Contains(T obj) {
lock (syncLock) {
return rqueue.Contains(obj);
}
}
public void CopyTo(T[] array, int index) {
lock (syncLock) {
rqueue.CopyTo(array, index);
}
}
public T Dequeue() {
lock (syncLock) {
return rqueue.Dequeue();
}
}
public void Enqueue(T obj) {
lock (syncLock) {
rqueue.Enqueue(obj);
}
}
public bool Equals(T obj) {
lock (syncLock) {
return rqueue.Equals(obj);
}
}
public Queue<T>.Enumerator GetEnumerator() {
lock (syncLock) {
return rqueue.GetEnumerator();
}
}
public new virtual int GetHashCode() {
lock (syncLock) {
return rqueue.GetHashCode();
}
}
public new Type GetType() {
lock (syncLock) {
return rqueue.GetType();
}
}
public T Peek() {
lock (syncLock) {
return rqueue.Peek();
}
}
public T[] ToArray() {
lock (syncLock) {
return rqueue.ToArray();
}
}
public new virtual string ToString() {
lock (syncLock) {
return rqueue.ToString();
}
}
public void TrimExcess() {
lock (syncLock) {
rqueue.TrimExcess();
}
}
}
}
以上是关于csharp ConcurrentQueue使用锁在旧的.NET项目中使用(如在Unity3D中)的主要内容,如果未能解决你的问题,请参考以下文章
evpp性能测试: 对无锁队列boost::lockfree::queue和moodycamel::ConcurrentQueue做一个性能对比测试
C#:高效的线程安全队列ConcurrentQueue<T>
使用并发集合
如何使用ConcurrentQueue进行线程处理
Task+ConcurrentQueue多线程编程
在托管 c++/.net 4.0 中创建对象的 ConcurrentQueue