1 spinlock(自旋锁):只有在内核态才有。并且他是忙等待,就是说不断的检测资源是否可访问。当资源被释放的时候执行相关操作
2 mutex(互斥量):控制多线程对某个资源的访问(同一时间只能有一个线程访问),当资源不可访问,线程就睡眠,当资源可访问的时候唤醒,但不能保证访问顺序。
3 semaphore(信号量):用户态和内核态都有,用作线程同步。初始化的时候可以设置资源数,比如Semaphore sp = new Semaphore(3);表明可以获取的资源数为3。并且可以由A线程获取,B线程释放。
若信号量值大于0,表示资源可使用,并且在使用后将信号量减1
信号量等于0表示没有资源可以使用。此时线程休眠。
在线程使用完毕后将信号量加1.此时若有休眠线程,则唤醒。