c# – 何时应该使用每个线程同步对象?
在什么情况下应该使用以下每个同步对象?
> ReaderWriter锁定 解决方法
>因为每次调用post()时wait()都会返回一次,所以信号量是一个基本的生产者 – 消费者模型 – 除了信号之外最简单的线程间消息形式.它们被使用,因此一个线程可以告诉另一个线程发生了它感兴趣的事情(以及多少次),以及管理对最多只能拥有固定有限数量用户的资源的访问.它们提供多线程代码所需的订购保证.
>互斥体做他们在锡上所说的话 – “相互排斥”.它们确保访问某些资源的权限一次只能在线程上“保留”.这样可以保证多线程代码所需的原子性和排序.在大多数操作系统中,它们还提供相当复杂的服务员行为,特别是为了避免优先级倒置. 请注意,信号量可以很容易地用于实现互斥,但由于信号量没有“所有者线程”,因此您不会使用信号量获得优先级倒置.因此它们不适合所有需要“锁定”的用途. > ReaderWriter锁是对互斥锁的优化,如果您有很多争用,大多数访问都是只读的,并且允许同时读取受保护的数据结构.在这种情况下,只有在涉及作者时才需要排除 – 读者不需要彼此排除.为了促进读者写作,所有其他读者必须在获得作者锁之前完成(或中止并开始等待他们也希望成为作者时重试).在没有更快的情况下,ReaderWriter锁可能会更慢,因为它们会通过互斥锁进行额外的簿记. 顺便说一句,这些答案不是C#特定的(因此例如关于“大多数操作系统”的评论).理查德提出了一个很好的观点,即在C#中你应该使用普通的旧锁.我相信监视器是一个互斥/条件变量对卷入一个对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |