单词网格安全性
Word-Net Thread safety
我在C 项目中使用Word-net(尽管库在C中)。具体而言,我只调用两个功能:
findtheinfo_ds
traceptrs_ds
现在,如果我正确理解了基础结构(我认为它是在我认为的90年代末写的,它的旧结构很旧),则该库将文件用作数据库,从其中检索我得到的缓冲区结果。
。但是,我不确定库的线程安全。
我当前的算法是:
SynsetPtr syn = findtheinfo_ds( query , NOUN, HYPERPTR, ALLSENSES );
if ( syn )
{
// Iterate all senses
while ( syn )
{
for ( int i = 0; i < syn->wcount; i++ )
std::cout << "synonym: " << syn->words[i] << std::endl;
int i = 0;
SynsetPtr ptr = traceptrs_ds( syn, HYPERPTR, NOUN, 1 );
while ( ptr )
{
for ( int x = 0; x <= i; x++ )
std::cout << "t";
for ( int i = 0; i < ptr->wcount; i++ )
std::cout << ptr->words[i] << ", ";
std::cout << std::endl;
i++;
auto old_ptr = ptr;
ptr = traceptrs_ds( ptr, HYPERPTR, NOUN, 1 );
free_syns( old_ptr );
}
free_syns( ptr );
syn = syn->nextss;
}
free_syns( syn );
}
}
但是,我想运行并行线程,同时搜索不同的单词。我知道今天的大多数UNIX/Linux发行版都有线程安全文件系统调用。
此外,我打算仅每个线程。
我担心的是,在上面的循环之前,a
wninit();
必须进行呼叫,这让我假设在图书馆中,单身人士在某个地方初始化。我无法窥视该代码,因为它是封闭消息的,而且我无法访问该singleton,因为winit()仅返回成功。
有什么方法可以:
- 在这种情况下确保线程安全或
- 如果库是安全的,请找到(通过任何可能的方式)?
它是从Debian软件包中动态加载的,该软件包的安装libwordnet-3.0.so
非常感谢任何能提供帮助的人!
好吧,确保库真正安全的唯一方法是分析其代码。或者只是询问其作者,然后相信HISR/她的答案:)。通常,存储在磁盘上的数据并不是导致线程不安全的原因,但是在许多地方代码可能会在多线程环境中破裂。必须检查全局变量,存在库函数中的static
的变量的存在等。
但是,如果您没有时间和/或打算研究代码,则可以使用该解决方案。当在工作过程中而不是工人线程执行并行任务时,您可以使用多进程技术,并且有一个导演流程为工人准备工作单位并收集结果。根据任务,这些工人可以用FastCGI
实施,也可以使用Boost.Interprocess
相关文章:
- 类与私有变量的其他类之间的线程安全性
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 使用对象文件读取三角形数据网格
- 如何从 Skia 路径几何体中获取网格?
- CGAL:如何创建填充边界曲线的曲面网格?
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 创建具有两个视口的Qt3D C++场景,其中显示适当的不同网格
- 如何从 3D 曲面网格中删除自相交三角形?
- 在均匀网格中处理碰撞
- 有关图像处理应用程序的硬件和软件安全性的建议
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 用于查找网格中最短路径的算法
- 循环通过网格获取温度,但不知道如何告诉程序停止循环
- 易失性sig_atomic_t的内存安全性
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 如何使用 sdl2 快速绘制像素网格?
- 如何使用条件计算 3D 网格中从一个点到另一个点的所有路径
- 使用 MFC 的表/网格
- 是否可以制作没有内部分割的cgal 3d多多马因网格?
- 单词网格安全性