C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReaderWriterLock )】
2014-01-22 08:25
871 查看
今天主要介绍下C#的两种锁:互斥锁(lock)和读写锁(ReaderWriterLock)
互斥锁(lock)
lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。当任何一个线程获取到锁后,其他线程如果需要使用该临界区内代码,则必须等待前一个线程使用完毕后释放锁。
代码示例:
读写锁(ReaderWriterLock )
ReaderWriterLock 定义支持单个写线程和多个读线程的锁。该锁的作用主要是解决并发读的性能问题,使用该锁,可以大大提高数据并发访问的性能,只有在写时,才会阻塞所有的读锁。
示例代码:
互斥锁(lock)
lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。当任何一个线程获取到锁后,其他线程如果需要使用该临界区内代码,则必须等待前一个线程使用完毕后释放锁。
代码示例:
Object thisLock = new Object(); lock (thisLock) { // 临界区代码块 }
读写锁(ReaderWriterLock )
ReaderWriterLock 定义支持单个写线程和多个读线程的锁。该锁的作用主要是解决并发读的性能问题,使用该锁,可以大大提高数据并发访问的性能,只有在写时,才会阻塞所有的读锁。
示例代码:
using System.Collections.Generic; using System.Windows; using System.Threading; namespace FYSTest { public partial class MainWindow : Window { List<int> list = new List<int>(); private ReaderWriterLock _rwlock = new ReaderWriterLock(); public MainWindow() { InitializeComponent(); Thread ThRead = new Thread(new ThreadStart(Read)); ThRead.IsBackground = true; Thread ThRead2 = new Thread(new ThreadStart(Read)); ThRead2.IsBackground = true; Thread ThWrite = new Thread(new ThreadStart(Write)); ThWrite.IsBackground = true; ThRead.Start(); ThRead2.Start(); ThWrite.Start(); } private void Read() { while (true) { //使用一个 System.Int32 超时值获取读线程锁。 _rwlock.AcquireReaderLock(100); try { if (list.Count > 0) { int result = list[list.Count - 1]; } } finally { //减少锁计数,释放锁 _rwlock.ReleaseReaderLock(); } } } int WriteCount = 0;//写次数 private void Write() { while (true) { //使用一个 System.Int32 超时值获取写线程锁。 _rwlock.AcquireWriterLock(100); try { list.Add(WriteCount++); } finally { //减少写线程锁上的锁计数,释放写锁 _rwlock.ReleaseWriterLock(); } } } } }
相关文章推荐
- C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReadWriteLock)】
- C#读写锁ReaderWriterLockSlim的使用
- C# 线程手册 第三章 使用线程 ReaderWriterLock 类
- c#线程同步系列(二) c#中ReaderWriterLock的使用
- c# 文件IO操作 StreamReader StreamWriter Split 使用
- Java多线程编程核心技术--Lock的使用(一)
- 浅谈C# Socket编程及C#如何使用多线程
- C# ReaderWriterLockSlim 实现
- C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
- C# ReaderWriterLock
- c# 文件IO操作 StreamReader StreamWriter Split 使用
- python多线程编程: 使用互斥锁同步线程
- C#中的ReaderWriterLock和LockFree Data Structure
- 【Java并发编程实战】– 使用读写锁实现同步数据访问 lock_2
- C#使用读写锁三行代码简单解决多线程并发的问题
- 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task
- c# 里使用XmlWriter XmlTextWriter XmlReader XmlTextReader
- C#使用读写锁解决多线程并发写入文件时线程同步的问题
- 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task
- 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task