目的:可以使用信号量来限制访问一个共享资源的线程数
含义:信号量指对共同资源进行访问控制的对象。在访问资源之前,线程必须从信号量获取许可,在访问完资源之后,这个线程必须将许可返回给信号量。一旦获得许可,信号量中可用许可的总数减1,一旦许可被释放,信号量中许可数加1.
只有一个许可的信号量可用来模拟一个相互排斥的锁。
举例:
(这里的锁指互斥锁)
区别:
作用域
信号量:进程间或者线程间
互斥锁:线程间
上锁时的执行
信号量:如果信号量的value > 0;那么其他的线程可以执行任务。并且成功执行后,value--;如果value=0,那么线程sem_wait 使得线程阻塞,直到sem_post被释放后value++,其他的线程才可以根据value执行。
互斥锁:只有一个对象被上了锁(加锁),那么其他任何线程都不可访问被加锁的对象。
一个是同步一个是互斥
信号量:用在多线程多任务的同步的,一个线程完成了某个动作就通过信号量告诉别的线程,别的线程在进行某些动作。
互斥锁:用在多线程多任务互斥的。一个线程占用了某个资源后,那么别的线程就无法访问,直到这个线程unlock,其他线程才可以利用。
也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。而线程互斥量则是“锁住某一资源”的概念,在锁定期间内,其他线程无法对被保护的数据进行操作。在有些情况下两者可以互换。
相关文章:
Atas ialah kandungan terperinci java - 信号量的概念及锁和信号量之间的相似和不同之处. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!