面试题答案
一键面试处理方法
- 锁机制:使用互斥锁(
Mutex
)来确保在同一时间只有一个线程能够访问和修改数据库资源。当一个线程获取到锁后,其他线程必须等待锁被释放才能进行操作,从而避免资源竞争。
代码示例
import threading
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host="localhost",
user="your_user",
password="your_password",
database="your_database"
)
# 创建游标
cursor = mydb.cursor()
# 创建互斥锁
lock = threading.Lock()
def insert_data(name, age):
try:
# 获取锁
lock.acquire()
sql = "INSERT INTO your_table (name, age) VALUES (%s, %s)"
val = (name, age)
cursor.execute(sql, val)
mydb.commit()
print(cursor.rowcount, "记录插入成功。")
finally:
# 释放锁
lock.release()
# 创建线程
thread1 = threading.Thread(target=insert_data, args=("Alice", 25))
thread2 = threading.Thread(target=insert_data, args=("Bob", 30))
# 启动线程
thread1.start()
thread2.start()
# 等待线程执行完毕
thread1.join()
thread2.join()
# 关闭游标和数据库连接
cursor.close()
mydb.close()
上述代码中,lock.acquire()
用于获取锁,lock.release()
用于释放锁。在执行数据库插入操作前后分别获取和释放锁,这样就保证了在同一时间只有一个线程能够执行数据库操作,避免了资源竞争。