Skip to content

Commit 4892bcc

Browse files
authored
Merge pull request yidao620c#174 from kyan001/patch-4
fix typo: RLoct -> RLock
2 parents 00a5512 + 900c2f9 commit 4892bcc

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

source/c12/p04_locking_critical_sections.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
7878
相比于这种显式调用的方法,with 语句更加优雅,也更不容易出错,特别是程序员可能会忘记调用 release() 方法或者程序在获得锁之后产生异常这两种情况(使用 with 语句可以保证在这两种情况下仍能正确释放锁)。
7979
为了避免出现死锁的情况,使用锁机制的程序应该设定为每个线程一次只允许获取一个锁。如果不能这样做的话,你就需要更高级的死锁避免机制,我们将在12.5节介绍。
80-
在 ``threading`` 库中还提供了其他的同步原语,比如 ``RLoct`` 和 ``Semaphore`` 对象。但是根据以往经验,这些原语是用于一些特殊的情况,如果你只是需要简单地对可变对象进行锁定,那就不应该使用它们。一个 ``RLock`` (可重入锁)可以被同一个线程多次获取,主要用来实现基于监测对象模式的锁定和同步。在使用这种锁的情况下,当锁被持有时,只有一个线程可以使用完整的函数或者类中的方法。比如,你可以实现一个这样的 SharedCounter 类:
80+
在 ``threading`` 库中还提供了其他的同步原语,比如 ``RLock`` 和 ``Semaphore`` 对象。但是根据以往经验,这些原语是用于一些特殊的情况,如果你只是需要简单地对可变对象进行锁定,那就不应该使用它们。一个 ``RLock`` (可重入锁)可以被同一个线程多次获取,主要用来实现基于监测对象模式的锁定和同步。在使用这种锁的情况下,当锁被持有时,只有一个线程可以使用完整的函数或者类中的方法。比如,你可以实现一个这样的 SharedCounter 类:
8181

8282
.. code-block:: python
8383
@@ -121,4 +121,4 @@
121121
with _fetch_url_sema:
122122
return urllib.request.urlopen(url)
123123
124-
如果你对线程同步原语的底层理论和实现感兴趣,可以参考操作系统相关书籍,绝大多数都有提及。
124+
如果你对线程同步原语的底层理论和实现感兴趣,可以参考操作系统相关书籍,绝大多数都有提及。

0 commit comments

Comments
 (0)