使用悲观锁的主要目的是确保在同时访问相同数据的情况下,只有一个线程可以进行操作。具体来说,在MySQL中,可以使用SELECT …FOR UPDATE语句来实现悲观锁。如果没有其他线程在修改相同的行,那么该查询将立即获得行级锁。如果另一个线程已经持有该行的锁定,那么该查询将等待锁被释放并尝试再次获取锁。
SELECT * FROM inventory WHERE product_id = 123 FOR UPDATE; UPDATE inventory SET quantity = quantity - 1 WHERE product_id = 123;
在上面的例子中,大家假设大家有一个商品库存表,其中包含每个商品的数量。大家尝试将数量减1。在执行更新操作之前,大家使用SELECT …FOR UPDATE语句来锁定该行,以确保大家是唯一修改该行的线程。
请注意,使用悲观锁的代价是降低了并发性能。如果单个资源被频繁锁定,则可能会出现大量等待冲突锁的情况,导致性能下降。因此,使用悲观锁应该是一个权衡,需要考虑系统中的各种因素,以确定什么时候使用它。