Linux之 线程池 | 单例模式的线程安全问题 | 其他锁
import threading
class ThreadPool:
def __init__(self, max_threads):
self.max_threads = max_threads
self.threads = []
self.tasks = []
self.lock = threading.Lock()
def add_task(self, task):
with self.lock:
self.tasks.append(task)
if len(self.threads) < self.max_threads:
thread = threading.Thread(target=self.run)
thread.start()
self.threads.append(thread)
def run(self):
with self.lock:
while self.tasks:
task = self.tasks.pop(0)
task()
# 使用ThreadPool
def task():
print("Task executed by thread:", threading.current_thread().name)
pool = ThreadPool(max_threads=5)
for _ in range(10):
pool.add_task(task)
这个代码示例展示了一个简单的线程池实现,它通过锁来保证线程安全,从而允许多个线程同步访问共享资源(任务队列)。每当有新任务加入时,如果当前线程数少于最大线程数,则创建一个新线程来处理任务。这里的锁用于确保任务添加和消费的原子操作,避免了竞态条件。
评论已关闭