如何制作线程本地库实例?

我们在工作场所使用旧式图书馆。它包含一些业务逻辑,并且它的代码在千年变化之前就丢失了。代码包含一些严格的财务算法,它积极使用全局变量。

我们计划并行进行一些计算,并启动新线程。每个线程将彼此独立,只是一个黑盒返回一些数字。

核心问题是库不是线程安全的。我们希望以某种方式使每个线程都具有共享库中自己的全局变量,代码等的副本。

这可能吗?目前,我们仅修补符号名称并使用前缀进行复制。

library-thread1.solibrary-thread2.so

在Linux下使用RTLD_DEEPBIND加载符号。

编辑:用进程替换线程是解决此问题的最严格方法,但它引起了人们对性能的担忧。而且似乎要做很多工作,而不仅仅是干脏事。

h11111_h 回答:如何制作线程本地库实例?

  

核心问题是该库不是线程安全的。

使用进程,而不是线程。该库将自动具有多进程安全性,不存在任何工作或意外共享的风​​险。

  

我们希望以某种方式使每个线程都具有共享库中全局变量,代码等的副本。

具有此属性的线程称为进程。进程-大多数是-线程,它们不共享全局变量(包括文件描述符,std::cout缓冲区等)。

在Linux或* NIX上,进程通常不比线程昂贵得多,或者通信速度慢得多。

  

用进程替换线程是解决此问题的最严格方法,但它引起了对性能的担忧

这样做,然后测量性能。如果确实存在问题,则可以在Linux上使用共享内存来保持线程的有效零开销通信,同时保留正确的语义。

  

似乎不仅要做肮脏的破解,还要做很多工作。

更担心在错误全部解决并且无法弄清原因的情况下支持这将是多少工作。

本文链接:https://www.f2er.com/3142764.html

大家都在问