tmrews(write lock):401
自然这些测量是和机器有关的。然而,这儿它们之间的差别才是重要的,而不是确切的数字。可以明显的看出tmrews的read lock比critical section慢7.5倍,而write lock要慢20倍。
还应该注意此时critical section只有一种结果,而tmrews的性能在并发使用时还会下降。这儿执行的测试只是简单的在一个循环之中,没有其他的请求者在进行请求或者有已经存在锁需要tmrews来对付。在实际的情况之中,tmrews可能比这儿显示的数字还要慢。
mutex
mutex和critical section的功能几乎一致。mutex的不同之处在于它是一个有更多功能的增强版critical section,当然额外负担也更多。
mutex有像能够命名,赋予安全属性,进程间访问这样的额外功能。
mutex可以在线程之间使用,但是很少这么用。mutex被设计用于进程间通信,而且一般也是这么用的。
semaphore
semaphore类似于mutex,但是不仅仅是一个entrant,它允许多个entrant。entrant的数量可以在semaphore创建时指定。
假想一下mutex是一个正在守卫银行现钞提款机(atm)的安全警卫。一次仅一人可以使用它,但是安全警卫正在保卫机器不让一队人同时使用它。
如果安装了4台atm,semaphore可能就能派上用场。在这种情况下,安全警卫可能允许一次4人进入并使用atm,但是一次不能多于4人。
event
event是用于线程或者进程间来通知某事已经发生的信号。event可以在某事被完成或者需要干预时用来通知其他task。
线程安全的类
线程安全的类是经过特别设计用来保护特定类型资源的类。每个线程安全的类都实现了一种类型的资源,并且对资源是什么和如何用它都有良好的认知。
线程安全的类可以简单如线程安全的整数,也可以复杂如线程安全的数据库。线程安全的类内部使用线程安全对象来完成它们的功能。
compartmentalization
compartmentalization是分离数据并把它赋给单一task使用的过程。对于服务器来说,compartmentalization经常是自然而然的,因为每个客户端都能由专门的线程来处理。