mos*_*man 12 c c++ linux shared-libraries thread-safety
我正在运行Linux,我希望能够将并行函数调用到共享库(.so)中,遗憾的是它不是线程安全的(我猜它有全局数据结构).
出于性能原因,我不想简单地将函数调用包装在互斥锁中.
我想做的是产生4个线程,并将同一个库的4个副本加载到进程内存中.然后每个线程将函数调用到它自己的库副本中.
不幸的是,dlopen不允许我加载任何库的更多一个实例.
有谁知道任何允许我多次加载库的方法?(除了制作4个.so文件的副本,每个都有不同的名称)
您可以加载库的多个独立副本,如下所示:
#define _GNU_SOURCE
#include <dlfcn.h>
...
void *handle = dlmopen(LM_ID_NEWLM, "/path/to/library.so", RTLD_NOW);
Run Code Online (Sandbox Code Playgroud)
更多信息在这里.
小智 6
您可以使用多个进程,而不是使用线程,每个进程都执行一些工作.这在*nix上很常见,通常更容易编码.
| 归档时间: |
|
| 查看次数: |
7992 次 |
| 最近记录: |