快速业务通道

Windows与Solaris互斥与同步机制对比

作者 佚名技术 来源 操作系统 浏览 发布时间 2012-06-27

韩三普

在Windows和Solaris中都提供进程与线程的互斥与同步机制。Windows提供了互斥对象、信号量对象和事件对象等三种内核同步对象和相应的系统调用 ,用于进程和线程同步。这些同步对象都有一个用户指定的对象名称,不同进程中用同样的对象名称来创建或打开对象,从而获得该对象在本进程的句柄。而Solaris也相应的提供了几个互斥同步对象,互斥锁(Mutex Locks),读写锁(Reader/writer (RW) locks),调度锁(Dispatcher Locks),和信号量(Semaphores)。下面将一一对比或者说明。

1互斥对象(Mutex)
Windows中的互斥对象(Mutex)就是互斥信号量,在一个时刻只能被一个线程使用。它的相关API包括:CreateMutex、OpenMutex和ReleaseMutex 。

a) CreateMutex创建一个互斥对象,返回对象句柄。

b) OpenMutex打开并返回一个已存在的互斥对象句柄,用于后续访问。

c) ReleaseMutex释放对互斥对象的占用,使之成为可用。

在Solaris中,有Mutex locks(可称做互斥锁)和Windows中的互斥对象有相似的地方又有所不同,相比更加复杂。一个线程得到一个互斥锁,就有两种可能,一是自旋(spin),调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁。另一情况是(block)阻塞,线程被安排在一个睡眠队列中,当锁被释放会发出信号给线程。自旋的好处是没有上下文切换的开销,效率非常高。而阻塞的优势是可以释放CPU给其它线程,但是需要上下文环境,并且比自旋锁效率低一点。由此系统为Mutex提供了两种锁,自旋锁和自适应锁。自旋锁就是采用自旋的方式,而自适应锁是根据持有者的状态,动态平衡是否采用自旋或者阻塞;如果锁的持有者在运行态,线程得到的锁就会是自旋的,如果不在运行态,就会是阻塞的,这样充分发挥了两种锁的优点。

下面是Solaris提供的mutex locks的实现函数:

a) mutex_init(): 初始化一个锁,只能选择初始自旋或者自适应两种的一种,默认是自适应。

b) mutex_enter():获取互斥锁

c) mutex_vector_enter(): 当锁被持有或者是自旋时获取互斥锁

d) mutex_exit(): 释放一个锁

2信号量对象(Semaphore)
Windows中信号量对象(Semaphore)就是资源信号量,取值的取值在0到指定最大值之间,用于限制并发访问的线程数。它的相关API包括:CreateSemaphore、OpenSemaphore和ReleaseSemaphore

a) CreateSemaphore创建一个信号量对象,在输入参数中指定最大值和初值,返回对象句柄

b) OpenSemaphore返回一个已存在的信号量对象的句柄,用于后续访问

c) ReleaseSemaphore释放对信号量对象的占用

在Solaris中,内核也提供了信号量(Semaphores),可同步的使用可共享的资源。可对它进行P、V操作。P操作尝试得到一个信号量,V操作释放一个信号量。根据共享资源的数量初始化信号量的值。其原理和windows非常相似。

下面是Solaris提供的semaphores的实现函数:

a) sema_init(): 初始化信号量

b) sema_p(): P操作,尝试获取信号量

c) sema_v(): V操作,释放信号量

d) sema_held(): 测试函数

e) sema_destroy(): 销毁信号量

3事件对象(Event)
Windows提供的另一个互斥与同步对象是事件对象(Event),相当于“触发器”,可用于通知一个或多个线程某事件的出现。它的相关的API包括:CreateEvent、OpenEvent、SetEvent、ResetEvent和PulseEvent

a) CreateEvent创建一个事件对象,返回对象句柄

b) OpenEvent返回一个已存在的事件对象的句柄,用于后续访问

c) SetEvent和PulseEvent设置指定事件对象为可用状态

d) ResetEvent设置指定事件对象为不可

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号