术语同步原语在Python线程中意味着什么?

问题描述 投票:0回答:1

线程文档中的许多地方都使用术语“同步原语”。我在RLock的描述中引用了这样一种用法:

可重入锁是一种同步原语,同一线程可以多次获取。在内部,除了原始锁使用的锁定/解锁状态之外,它还使用“所属线程”和“递归级别”的概念。在锁定状态下,某个线程拥有锁;在解锁状态下,没有线程拥有它。

同步原语是什么意思?

python python-multithreading
1个回答
0
投票

它不是 Python 线程特定术语,而是更广泛地用于并发上下文。

A primative 指的是可以合成更复杂机制的基本机制。线程同步原语是一种机制,允许一个线程(或在某些情况下多个线程)等待,直到其他线程到达其执行中的某个点。

RLock
可重入锁)是mutex(互斥)信号量的示例。互斥锁用于保护资源(例如内存区域或硬件设备)免遭两个线程的并发访问。

因此,例如,如果线程 A 使用

threading.RLock.acquire
获取对资源的访问权限,那么当它持有该资源时,线程 B 尝试获取相同的资源,它也会调用
threading.RLock.acquire
,但该资源已经被锁定,因此线程 B将block挂起来自线程A的
threading.RLock.release
调用。当线程A释放资源时,线程B可以继续(即线程B中的
threading.RLock.acquire
返回,资源被锁定并且现在由线程B拥有

可重入部分指的是拥有线程可能多次调用同一资源的

threading.RLock.acquire(例如,这可能发生在同一设备驱动程序中的嵌套调用中)。也就是说它不能阻塞自己的锁。如果您使用常规二进制信号量进行互斥,就会发生这种情况。当调用 acquire

 时,计数器会递增,而在 
release
 上,计数器会递减 - 互斥体不会在 
release
解锁,除非计数器变为零。
一般来说(即不是 Python 
threading

特有的),同步原语包括:

计算信号量

    二进制信号量
  • 互斥信号量(或锁)
  • 信号
  • 事件标志
  • 条件变量
  • 使用互斥体时必须小心,以避免死锁,例如,线程 A 等待线程 B 持有的资源,同时持有线程 B 试图获取的资源。避免此类情况的一种方法是让单个线程访问共享资源,并让其他线程向该“服务器”线程发出请求。这样就不需要互斥——请求由所有者线程序列化。这种模式依赖于另一个
  • 原语
- IPC(进程间通信)原语,例如消息队列或邮箱。

© www.soinside.com 2019 - 2024. All rights reserved.