paw*_*que 13 python annotations locking
是否有一个python锁注释,它与python方法的效果与java方法的"synchronized"关键字相同?
mou*_*uad 15
我可以假设,没有内置的功能在Python存在,但你可以理解它是如何在Java中的工作实现它此链接:
创建的每个Java对象(包括每个加载的类)都有一个关联的锁或监视器.将代码放在synchronized块中会使编译器附加指令以在执行代码之前获取指定对象的锁定,然后释放它(因为代码正常或异常完成).在获取锁定并释放它之间,线程被称为"拥有"锁.在线程A希望获取锁定时,如果线程B已经拥有它,则线程A必须等待线程B释放它.
所以也许这样的东西可以工作:
java中的synchronized语句:
public class Java {
static private int count = 0;
public void increment() {
synchronized (this) {
count++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
成了:
import threading
class Java:
cout = 0
lock = threading.RLock()
def increment():
with Java.lock:
Java.cout += 1
Run Code Online (Sandbox Code Playgroud)
和Java中的synchronized方法:
public class Java {
static private int count = 0;
public synchronized void increment() {
count ++;
}
}
Run Code Online (Sandbox Code Playgroud)
成为:
import threading
def synchronized(method):
""" Work with instance method only !!! """
def new_method(self, *arg, **kws):
with self.lock:
return method(self, *arg, **kws)
return new_method
class Java:
count = 0
lock = threading.RLock()
@synchronized
def incremenet(self):
Java.count += 1
Run Code Online (Sandbox Code Playgroud)
显式优于隐式.
注意:我在Java方面的知识非常有限,这是我关于这个Java功能的第一次演讲,所以也许我想念一些东西(或者我可能会错过这里的所有观点:)),希望这个答案可以帮助别人.
注意:我创建的锁是一个类变量,因此线程同步发生在类级别,如果我们想在实例级别(仅)进行同步,我认为java是如何做的,上面的代码必须改变.
| 归档时间: |
|
| 查看次数: |
7905 次 |
| 最近记录: |