信号量和互斥量都是用于实现线程同步的机制,但在使用方式和功能上有一些区别。\n\n1. 信号量(Semaphore):\n- 信号量可以有一个计数器,用于控制同时访问某个资源的线程数量。\n- 信号量可以有一个初始值,并且可以增加或减少计数器的值。\n- 当线程需要获取信号量时,如果计数器大于0,则线程可以继续执行,同时将计数器减1;如果计数器等于0,则线程被阻塞,直到其他线程释放信号量。\n- 信号量允许多个线程同时访问某个资源,控制线程的并发度。\n\n示例:假设有一个公共的资源,比如打印机,每次只能有两个线程同时访问,其他线程需要等待。这时可以使用一个初始值为2的信号量来控制线程的访问。\n\n2. 互斥量(Mutex):\n- 互斥量只能有两个状态:锁定和非锁定。\n- 当线程需要访问某个被互斥量保护的资源时,如果互斥量是非锁定状态,则线程可以继续执行,并将互斥量锁定;如果互斥量是锁定状态,则线程被阻塞,直到其他线程释放互斥量。\n- 互斥量只允许一个线程访问某个资源,确保了资源的排他性。\n\n示例:假设有一个共享的全局变量,多个线程需要对其进行读写操作。为了避免竞争条件,可以使用一个互斥量来保护该变量,每次只能有一个线程对其进行操作。\n\n总结:\n信号量用于控制对资源的并发访问数量,可以有多个线程同时访问;互斥量用于保护共享资源,每次只能有一个线程访问。


原文地址: https://www.cveoy.top/t/topic/praG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录