harmony OS NEXT-设备开发中的核心概念

2025-03-22 15:41:00
135次阅读
0个评论

并发编程中的核心概念

1. 队列(Queue)

队列是一种先进先出(FIFO)的数据结构,用于在线程之间传递数据,确保线程安全。

特点:

  • 线程安全:队列内部实现了线程同步,多个线程可以安全地访问。
  • FIFO:数据按照进入队列的顺序被处理。

应用场景:

  • 生产者-消费者模型。
  • 任务调度系统。

示例代码(Python):

import queue

# 创建队列
q = queue.Queue()

# 放入数据
q.put("Task 1")
q.put("Task 2")

# 取出数据
while not q.empty():
    task = q.get()
    print(f"Processing {task}")

2. 事件(Event)

事件是一种线程间的信号机制,用于线程之间的同步。

特点:

  • 信号机制:线程可以等待事件发生,或者通知其他线程事件已经发生。
  • 灵活性:可用于复杂的线程间通信。

应用场景:

  • 控制线程的执行顺序。
  • 多线程任务完成的通知。

示例代码(Python):

import threading

# 创建事件
event = threading.Event()

def worker():
    print("Worker waiting for event...")
    event.wait()  # 等待事件触发
    print("Event received, worker proceeding.")

# 创建线程
thread = threading.Thread(target=worker)
thread.start()

# 触发事件
print("Main thread setting event.")
event.set()

3. 信号量(Semaphore)

信号量用于控制同时访问某一资源的线程数量。

特点:

  • 计数器:限制线程的并发数量。
  • 线程同步:保护共享资源。

应用场景:

  • 限制数据库连接池的大小。
  • 控制访问共享资源的线程数。

示例代码(Python):

import threading
import time

# 创建信号量
semaphore = threading.Semaphore(2)  # 最多允许2个线程访问

def worker(name):
    print(f"{name} waiting for semaphore...")
    with semaphore:  # 获取信号量
        print(f"{name} acquired semaphore.")
        time.sleep(2)
    print(f"{name} released semaphore.")

# 创建线程
threads = [threading.Thread(target=worker, args=(f"Thread-{i}",)) for i in range(4)]
for t in threads:
    t.start()
for t in threads:
    t.join()

4. 互斥锁(Mutex/Lock)

互斥锁用于确保某一时刻只有一个线程能够访问某一共享资源。

特点:

  • 独占性:只有一个线程能持有锁。
  • 线程同步:防止数据竞争。

应用场景:

  • 保护共享变量。
  • 防止线程间的数据竞争。

示例代码(Python):

import threading

# 创建锁
lock = threading.Lock()
shared_resource = 0

def worker():
    global shared_resource
    for _ in range(100000):
        with lock:  # 获取锁
            shared_resource += 1

# 创建线程
threads = [threading.Thread(target=worker) for _ in range(2)]
for t in threads:
    t.start()
for t in threads:
    t.join()

print(f"Final value of shared_resource: {shared_resource}")

对比总结

特性 队列(Queue) 事件(Event) 信号量(Semaphore) 互斥锁(Mutex/Lock)
主要功能 数据传递 信号通知 控制并发线程数 保护共享资源
是否线程安全
使用场景 任务队列 线程间通知 资源访问限制 共享资源保护
收藏00

登录 后评论。没有帐号? 注册 一个。