线程同步:System.Core中新的读写锁

读写锁是进程同步中经常使用的锁。

在System.Core中ReaderWriterLockSlim类比较好用,它是基于写优先策略的。它还支持从读锁升级到写锁,称为Upgradable Mode.

简单测试代码如下:

private static void Test()
{
    ReaderWriterLockSlim locker = new ReaderWriterLockSlim();
    ParameterizedThreadStart reader = o =>
    {
        var innerlocker = locker;
        int number = Convert.ToInt32(o);
        while (true)
        {
            locker.EnterReadLock();
            Console.WriteLine("Reading  " + number);
            Thread.Sleep(500);
            locker.ExitReadLock();
        }
    };
    ParameterizedThreadStart writer = o =>
    {
        var innerlocker = locker;
        int number = Convert.ToInt32(o);
        while (true)
        {
            locker.EnterWriteLock();
            Console.WriteLine("Writing  " + number);
            Thread.Sleep(50);
            locker.ExitWriteLock();
        }
    };
    for (int i = 1; i <= 100; i++)
    {
        Thread thread = new Thread(reader);
        thread.Start(i);
    }
    for (int i = 11; i <= 15; i++)
    {
        Thread thread = new Thread(writer);
        thread.Start(i);
    }

    AutoResetEvent waitForever = new AutoResetEvent(false);
    waitForever.WaitOne();
}
时间: 2024-10-15 02:52:26

线程同步:System.Core中新的读写锁的相关文章

并发数据结构: .NET Framework中提供的读写锁

在多线程编程时,开发人员经常会遭遇多个线程读写某个资源的情况.这就需要进行线程同步来保证 线程安全.一般情况下,我们的同步措施是使用锁机制.但是,假如线程只对资源进行读取操作,那么根 本不需要使用锁:反之,假如线程只对资源进行写入操作,则应当使用互斥锁(比如使用 Monitor 类等) .还有一种情况,就是存在多个线程对资源进行读取操作,同时每次只有一个线程对资源进行独占写入操 作.这正是本文主题--读写锁的用武之地.ReaderWriterLock 类 .NET Framework BCL 在

UNIX环境高级编程:线程同步之读写锁及属性

读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程.当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步, 互斥量要么是锁住状态要么是不加锁状态,而且一次只有一个线程可以对其加锁.读写锁可以有三种状态:读模式下的加锁状态,写模式下的加锁状态,不加锁状态. 一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁(读或写

Java多线程编程中线程锁与读写锁的使用示例_java

线程锁LockLock  相当于 当前对象的 Synchronized import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * Lock lock = new ReentrantLock(); * lock.lock(); lock.unLock(); * 类似于 synchronized,但不能与synchronized 混用 */ public class Lo

嵌入式 Linux线程同步读写锁rwlock示例

读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁.1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞:2. 当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行枷锁的线程将阻塞:3. 当读写锁在读模式锁状态时,如果有另外线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁请求,这样可以避免读模式锁长期占用,而等待的写模式锁请求长期阻塞:这种锁适用对数据结构进行读

基本线程同步(七)修改Lock的公平性

修改Lock的公平性 在ReentrantLock类和 ReentrantReadWriteLock类的构造器中,允许一个名为fair的boolean类型参数,它允许你来控制这些类的行为.默认值为 false,这将启用非公平模式.在这个模式中,当有多个线程正在等待一把锁(ReentrantLock或者 ReentrantReadWriteLock),这个锁必须选择它们中间的一个来获得进入临界区,选择任意一个是没有任何标准的.true值将开启公平 模式.在这个模式中,当有多个线程正在等待一把锁(R

Java 并发包中的读写锁及其实现分析

1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞.读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得 并发性相比一般的排他锁有了很大提升. 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式.假设在程序中定义一个共享的数据结构用作缓存,它大部分时间提供读服务(例如:查

《Java并发编程的艺术》-Java并发包中的读写锁及其实现分析

作者:魏鹏  本文是<Java并发编程的艺术>的样章 1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞.读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升. 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式.假设在程序中定义一个共享

非一致性内存访问的读写锁

原文地址,译文地址,译者: 李杰聪,校对:郑旭东 原文作者: Irina Calciu         Brown University        irina@cs.brown.edu Dave Dice          Oracle Labs             dave.dice@oracle.com Yossi Lev           Oracle Labs             yossi.lev@oracle.com Victor Luchangco    Oracle

pthread_rwlock_t读写锁函数说明

转:http://www.cnblogs.com/renxinyuan/p/3875659.html 索引:  初始化一个读写锁pthread_rwlock_init 读锁定读写锁      pthread_rwlock_rdlock 非阻塞读锁定 pthread_rwlock_tryrdlock 写锁定读写锁      pthread_rwlock_wrlock 非阻塞写锁定      pthread_rwlock_trywrlock 解锁读写锁         pthread_rwlock_