Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当从不同线程访问带有getter和setter的类时,我需要锁吗?_Python_Multithreading_Locks - Fatal编程技术网

Python 当从不同线程访问带有getter和setter的类时,我需要锁吗?

Python 当从不同线程访问带有getter和setter的类时,我需要锁吗?,python,multithreading,locks,Python,Multithreading,Locks,我正在编写一些代码,其中一个线程使用一个类中的setter,另一个线程使用同一个类中的getter 我的问题是,当线程同时调用GETER和SETER时,我需要使用锁还是没有问题?锁的最重要的用例是防止线程B、C和D在一个不一致或无效的状态下看到一些共享数据集合,而线程A处于修改数据的中间。 GIL不会阻止这种情况发生,因为GIL不会阻止线程被抢占调度 “二传手”和“接受者”是不相关的。关键是,您有不同的线程访问共享变量。如果这些变量中的任何一个与其他变量有重要的关系,并且更新它们的线程必须临时中

我正在编写一些代码,其中一个线程使用一个类中的setter,另一个线程使用同一个类中的getter


我的问题是,当线程同时调用GETER和SETER时,我需要使用锁还是没有问题?

锁的最重要的用例是防止线程B、C和D在一个不一致或无效的状态下看到一些共享数据集合,而线程A处于修改数据的中间。 GIL不会阻止这种情况发生,因为GIL不会阻止线程被抢占调度

“二传手”和“接受者”是不相关的。关键是,您有不同的线程访问共享变量。如果这些变量中的任何一个与其他变量有重要的关系,并且更新它们的线程必须临时中断这种关系,那么您需要锁。如果没有锁,调度程序可以“交换”暂时中断关系的线程,其他一些线程可以看到处于“中断”状态的变量


锁不会阻止调度程序在任何时候“交换”任何线程,但它会阻止其他线程在第一个线程再次运行之前看到混乱,清理混乱并解锁锁。

简单的回答是,是的,尽管python的GIL是错误的,但在多线程程序中可能需要锁。