并发频率计数器是一个用于统计并发操作频率的工具。在多线程或多进程环境下,可能会出现并发问题,例如多个线程同时对计数器进行操作,导致计数器的值不正确。
下面是一个使用互斥锁(Mutex)来解决并发问题的示例代码:
import threading
class ConcurrentFrequencyCounter:
def __init__(self):
self.counter = 0
self.lock = threading.Lock()
def increment(self):
with self.lock:
self.counter += 1
def decrement(self):
with self.lock:
self.counter -= 1
def get_value(self):
with self.lock:
return self.counter
# 示例用法
counter = ConcurrentFrequencyCounter()
def worker():
for _ in range(100000):
counter.increment()
threads = []
for _ in range(10):
t = threading.Thread(target=worker)
t.start()
threads.append(t)
for t in threads:
t.join()
print(counter.get_value()) # 输出结果应为 1000000
在这个示例中,我们定义了一个ConcurrentFrequencyCounter
类,其中包含一个计数器和一个互斥锁(lock
)。 increment
和decrement
方法用于对计数器进行加减操作,使用with self.lock
语句来确保每次只有一个线程可以访问计数器。get_value
方法用于获取计数器的值。
在主程序中,我们创建了10个线程来执行worker
函数,每个线程都会对计数器进行100000次递增操作。最后,我们输出计数器的值,预期结果应该是1000000。
通过使用互斥锁,我们可以确保在任何时刻只有一个线程可以访问计数器,从而避免了并发问题。