信号是初始化一定数量的许可,限制获取许可的线程数,从而阻止未获得许可的线程,并达到限制对特定资源访问的线程数。
实现原理的所有多线程访问的控制方式归根到底都是管理可共享的地址,就像简单的全局变量对计数器的判断一样,可以共享存储器的数据结构的操作。
接口函数new () : creatasemaphorewithaspecifiednumberkerys;
get (: obtianoneormorekeysfromthebusket;
put ) ) : returnoneormorekyesintothebucker;
try _ get (: trytoobtianoneormaorkeyswithoutblocking;
单许可证使用案例,两个线程冲突:
SEM=new(1) process 1: sem.get(1) 1; SEM.put(1; process1:SEM.get(1; SEM.put(1; 多许可证、多线程竞争
SEM=new(5) process 1: sem.get(2) 2; SEM.put(2; process1:SEM.get(2; SEM.put(2; process2:SEM.get(2; SEM.put(2;