相关疑难解决方法(0)

有没有办法杀死一个线程?

是否可以在不设置/检查任何标志/信号量/等的情况下终止正在运行的线程?

python multithreading kill terminate

710
推荐指数
16
解决办法
71万
查看次数

"原子"在编程中意味着什么?

在Effective Java一书中,它指出:

语言规范保证读取或写入变量是原子的,除非变量是类型longdouble[JLS,17.4.7].

"原子"在Java编程或一般编程的上下文中意味着什么?

java atomic

250
推荐指数
5
解决办法
13万
查看次数

Python线程和原子操作

我想用同步stop()方法实现一个线程.

我见过这样的版本:

class Thread1:
    def __init__(self):
        self._stop_event = threading.Event()
        self._thread = None

    def start(self):
        self._thread = threading.Thread(target=self._run)
        self._thread.start()

    def stop(self):
        self._stop_event.set()
        self._thread.join()

    def _run(self):
        while not self._stop_event.is_set():
            self._work()

    def _work(self):
        print("working")
Run Code Online (Sandbox Code Playgroud)

但我已经读过原子操作是线程安全的,在我看来它可以在没有的情况下完成Event.所以我想出了这个:

class Thread2:
    def __init__(self):
        self._working = False
        self._thread = None

    def start(self):
        self._working = True
        self._thread = threading.Thread(target=self._run)
        self._thread.start()

    def stop(self):
        self._working = False
        self._thread.join()

    def _run(self):
        while self._working:
            self._work()

    def _work(self):
        print("working")
Run Code Online (Sandbox Code Playgroud)

它认为在C中类似的实现被认为是不正确的,因为编译器可以放入_working寄存器(甚至优化),工作线程永远不会知道变量已经改变.可以在Python中发生类似的事情吗?这个实现是否正确?我的目的不是完全避免事件或锁定,只是想了解这个原子操作的事情.

python multithreading

5
推荐指数
1
解决办法
4995
查看次数

标签 统计

multithreading ×2

python ×2

atomic ×1

java ×1

kill ×1

terminate ×1