线程同步-信号量

来源:互联网 发布:网络彩票最新消息动态 编辑:程序博客网 时间:2024/05/16 08:31

3.信号量 (Semaphore) A synchronization object that allows a limited number of threads in one or more processes to access a resource. Semaphores are useful in controlling access to a shared resource that can only support a limited number of users.

与互斥对象相似,但它可以计数。允许一个给定资源同时被一定数量的(一个或者多个进程中的)线程访问。

信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。 计数器计算的结果是允许访问共享资源的通行证。因此,为了访问共享资源,线程必须从信号量得到通行证, 如果该信号量的计数大于0,则此线程获得一个通行证,这将导致信号量的计数递减,否则,此线程将阻塞直到获得一个通行证为止。当此线程不再需要访问共享资源时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。

优点: 允许多个线程同时访问,当指定只有一个信号时,类似Mutex可和锁搭配实现 多写多读的队列。

原创粉丝点击