我试图理解Python中的线程.我看过文档和示例,但坦率地说,很多例子都过于复杂,我很难理解它们.
你如何清楚地展示为多线程划分的任务?
我想为实验创建一个非线程安全的代码块,这些是2个线程要调用的函数.
c = 0
def increment():
c += 1
def decrement():
c -= 1
Run Code Online (Sandbox Code Playgroud)
这段代码线程安全吗?
如果没有,我可以理解为什么它不是线程安全的,以及什么样的语句通常会导致非线程安全的操作.
如果它是线程安全的,我怎样才能使它明确地是非线程安全的?
如果我有一个整数i,i += 1在多个线程上做是不安全的:
>>> i = 0
>>> def increment_i():
... global i
... for j in range(1000): i += 1
...
>>> threads = [threading.Thread(target=increment_i) for j in range(10)]
>>> for thread in threads: thread.start()
...
>>> for thread in threads: thread.join()
...
>>> i
4858 # Not 10000
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个列表l,l += [1]在多个线程上做似乎是安全的:
>>> l = []
>>> def extend_l():
... global l
... for j in range(1000): l += [1]
... …Run Code Online (Sandbox Code Playgroud)