Skip to content

Commit 1f70462

Browse files
committed
start ch2.5
1 parent d40902d commit 1f70462

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,16 @@
11
使用Lock和RLock进行线程同步
22
===========================
3+
4+
当两个或以上对共享内存的操作发生在并发线程中,并且至少有一个可以改变数据,又没有同步机制的条件下,就会产生竞争条件,可能会导致执行无效代码、bug、或异常行为。
5+
6+
竞争条件最简单的解决方法是使用锁。锁的操作非常简单,当一个线程需要访问部分共享内存时,它必须先获得锁才能访问。此线程对这部分共享资源使用完成之后,该线程必须释放锁,然后其他线程就可以拿到这个锁并访问这部分资源了。
7+
8+
很显然,避免竞争条件出现是非常重要的,所以我们要保证,在同一时刻只有一个线程允许访问共享内存。
9+
10+
尽管原理很简单,但是这样使用是work的。
11+
12+
然而,在实际使用的过程中,我们发现这个方法经常会导致一种糟糕的死锁现象。当不同的线程要求得到一个锁时,死锁就会发生,这时程序不可能继续执行,因为它们互相拿着对方需要的锁。
13+
14+
.. image:: ../images/deadlock.png
15+
16+

Diff for: images/deadlock.png

114 KB
Loading

0 commit comments

Comments
 (0)