Python 当从不同线程访问带有getter和setter的类时,我需要锁吗?
我正在编写一些代码,其中一个线程使用一个类中的setter,另一个线程使用同一个类中的getterPython 当从不同线程访问带有getter和setter的类时,我需要锁吗?,python,multithreading,locks,Python,Multithreading,Locks,我正在编写一些代码,其中一个线程使用一个类中的setter,另一个线程使用同一个类中的getter 我的问题是,当线程同时调用GETER和SETER时,我需要使用锁还是没有问题?锁的最重要的用例是防止线程B、C和D在一个不一致或无效的状态下看到一些共享数据集合,而线程A处于修改数据的中间。 GIL不会阻止这种情况发生,因为GIL不会阻止线程被抢占调度 “二传手”和“接受者”是不相关的。关键是,您有不同的线程访问共享变量。如果这些变量中的任何一个与其他变量有重要的关系,并且更新它们的线程必须临时中
我的问题是,当线程同时调用GETER和SETER时,我需要使用锁还是没有问题?
锁的最重要的用例是防止线程B、C和D在一个不一致或无效的状态下看到一些共享数据集合,而线程A处于修改数据的中间。 GIL不会阻止这种情况发生,因为GIL不会阻止线程被抢占调度
“二传手”和“接受者”是不相关的。关键是,您有不同的线程访问共享变量。如果这些变量中的任何一个与其他变量有重要的关系,并且更新它们的线程必须临时中断这种关系,那么您需要锁。如果没有锁,调度程序可以“交换”暂时中断关系的线程,其他一些线程可以看到处于“中断”状态的变量锁不会阻止调度程序在任何时候“交换”任何线程,但它会阻止其他线程在第一个线程再次运行之前看到混乱,清理混乱并解锁锁。简单的回答是,是的,尽管python的GIL是错误的,但在多线程程序中可能需要锁。