异步操作与锁
互斥锁(lock)
lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。当任何一个线程获取到锁后,其他线程如果需要使用该临界区内代码,则必须等待前一个线程使用完毕后释放锁。
Object thisLock = new Object(); lock (thisLock) { // 临界区代码块 }
读写锁(ReadWriteLock)
ReadWriteLock定义支持单个写线程和多个读线程的锁。该锁的作用主要是解决并发读的性能问题,使用该锁,可以大大提高数据并发访问的性能,只有在写时,才会阻塞所有的读锁。
//使用一个 System.Int32 超时值获取读线程锁。 _rwlock.AcquireReaderLock(100); try { if (list.Count > 0) { int result = list[list.Count - 1]; } } finally { //减少锁计数,释放锁 _rwlock.ReleaseReaderLock(); }
//使用一个 System.Int32 超时值获取写线程锁。 _rwlock.AcquireWriterLock(100); try { list.Add(WriteCount++); } finally { //减少写线程锁上的锁计数,释放写锁 _rwlock.ReleaseWriterLock(); }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步