clr/c++自定线程安全集合
代码如下:
难点重写索引器、重写基类方法、基类方法显示调用示例
generic <class T> public ref class SyncList : public List<T>
{
private:
Object^ _rootLock = gcnew Object(); public:
virtual property T default[int]
{
T get(int index) new
{
try
{
Monitor::Enter(_rootLock);
return List::default[index];
}
finally
{
Monitor::Exit(_rootLock);
}
}
void set(int index,T value) new
{
try
{
Monitor::Enter(_rootLock);
List::default[index] = value;
}
finally
{
Monitor::Exit(_rootLock);
}
}
} public:
virtual void Add(T item)new
{
try
{
Monitor::Enter(_rootLock);
List::Add(item);
}
finally
{
Monitor::Exit(_rootLock);
}
} virtual void AddRange(IEnumerable<T>^ items)new
{
try
{
Monitor::Enter(_rootLock);
List::AddRange(items);
}
finally
{
Monitor::Exit(_rootLock);
}
} virtual void Remove(T item)new
{
try
{
Monitor::Enter(_rootLock);
List::Remove(item);
}
finally
{
Monitor::Exit(_rootLock);
}
} virtual void RemoveAt(int index)new
{
try
{
Monitor::Enter(_rootLock);
List::RemoveAt(index);
}
finally
{
Monitor::Exit(_rootLock);
}
}
};
clr/c++自定线程安全集合的更多相关文章
- [CLR via C#]25. 线程基础
一.Windows为什么要支持线程 Microsoft设计OS内核时,他们决定在一个进程(process)中运行应用程序的每个实例.进程不过是应用程序的一个实例要使用的资源的一个集合.每个进程都赋予了 ...
- C#的变迁史 - C# 4.0 之线程安全集合篇
作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了. 而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们, ...
- 线程安全集合 ConcurrentDictionary<TKey, TValue> 类
ConcurrentDictionary<TKey, TValue> 类 [表示可由多个线程同时访问的键/值对的线程安全集合.] 支持 .NET Framework 4.0 及以上. 示例 ...
- Net线程安全集合
在看Supersocket源码的时候发现很多地方都用到了我们不是很常用的线程安全集合,这些都是由net优化后的线程安全集合因此 应该比我们常规lock来效率好一些 比如说: 1 CurrentStac ...
- 通过Collections将集合转换为线程安全类集合
通过Collections将集合转换为线程安全类集合 List集合: List<String> list=new ArrayList<String>();list.add(&q ...
- .Net 线程安全集合
.Net 提供了基于生产-消费模式的集合类,这些集合对多线程访问安全,定义在System.Collections.Concurrent名称空间中.这个名称空间中包括基础接口IProduceConsum ...
- CLR via C# 混合线程同步构造
1. 自旋,线程所有权和递归 2. 混合构造 a.ManualResetEventSlim b.SemaphoreSlim c.Monitor d.ReaderWriterLockSlim 3.条件变 ...
- Concurrent下的线程安全集合
1.ArrayBlockingQueue ArrayBlockingQueue是由数组支持的线程安全的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序.这是一个典型的“有界缓存区”,固定 ...
- C# 线程安全集合
转载 对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行访问.经常要做的就是对一些队列进行加锁-解锁,然后执行类似插入,删除等等互斥操作. .NetFramework 4.0 中提供了一些 ...
随机推荐
- java实现spark常用算子之coalesce
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- linuxCentOS6.8搭建Apache,用http访问svn
前提:SVN已经安装配置ok,可以正常访问 目前本人svn用小乌龟客户端svn协议访问地址为:svn://ip:3691/opt/svn/repository,端口后面的是svn仓库的路径 那么如果从 ...
- php晚了8小时 PHP5中的时间相差8小时的解决办法
php页面顶部加一句date_default_timezone_set("Asia/Shanghai");或者直接在php.ini设置date.timezone=Asia/Shan ...
- Django学习系列3:创建仓库
在创建仓库之前,在项目superlists中新建一个Python文件,命名为functional_tests.py,里面的内容如下: # File: functional_test.py # Auth ...
- SQL小操作
用string.Format格式化参数 string sqlCmd = string.Format("select NO from [dbo].[SendAcerData] where BA ...
- 报表解决方案Telerik Reporting发布R2 2019 SP1|支持MS Access
Telerik Reporting拥有直观.无代码的Win.网页与PDF报表的创建功能,直观的设计与具有特定风格的报表,无代码数据打包.向导.语法开发工具.自动操作.分类整理.过滤.有条件格式化.转化 ...
- 浅谈redis分布式锁用法
使用redis的setnx命令进行实现 @Component @Slf4j public class RedisLock { @Autowired private StringRedisTemplat ...
- percona 5.7 + tokudb
percona 5.7 + tokudb Percona + TokuDB 部署 # 参考资料https://www.kancloud.cn/devops-centos/centos-linux-de ...
- 【NOIP2016提高A组五校联考2】running
题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每 ...
- 详解GSM的基带跳频和射频跳频
跳频技术源于军事通信,目的是为了获得较好的保密性和抗干扰能力.跳频分为快速和慢速两种,GSM中的跳频属于慢跳频. 跳频方式从时域概念上分为帧跳频和时隙跳频,从载频实现方式上分为射频跳频和基带跳频. 帧 ...