线程之间的共享资源重建



我正试图找出正确的方法来处理以下python同步场景。假设有一个共享资源connection,它由8个线程用于通过连接发出命令。偶尔,connection会过时并抛出异常,为此我添加了一个异常处理例程,该例程可以重新建立连接。

问题是,当连接失效时,所有8个线程都会得到异常。为了解决这个问题,我可以添加一个信号量,这样一次只有一个线程会尝试重新建立连接,但即使这样也有问题。

如果线程1是第一个获取信号量的,那么当线程2-8遇到异常时,它们将很快被阻塞在该信号量上。线程1将获得线程2-8可以成功使用的新连接,并将释放信号量。

在这一点上,我希望线程2-8再次被处理,然而,由于它们之前在信号量上被阻止,线程2现在在信号量中被阻止,并试图再次建立连接,线程1现在已经在尝试使用该连接。这可能导致一个级联问题,即线程不断尝试使用连接,而其他线程则试图重新建立连接。是否有处理这样的共享资源的标准范例?

我会在任何线程获取信号量后检查连接是否建立。如果没有,则重新建立,否则照常进行。

最新更新