单词网格安全性

Word-Net Thread safety

本文关键字:安全性 网格 单词      更新时间:2023-10-16

我在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()仅返回成功。

有什么方法可以:

  1. 在这种情况下确保线程安全或
  2. 如果库是安全的,请找到(通过任何可能的方式)?

它是从Debian软件包中动态加载的,该软件包的安装libwordnet-3.0.so

非常感谢任何能提供帮助的人!

好吧,确保库真正安全的唯一方法是分析其代码。或者只是询问其作者,然后相信HISR/她的答案:)。通常,存储在磁盘上的数据并不是导致线程不安全的原因,但是在许多地方代码可能会在多线程环境中破裂。必须检查全局变量,存在库函数中的static的变量的存在等。

但是,如果您没有时间和/或打算研究代码,则可以使用该解决方案。当在工作过程中而不是工人线程执行并行任务时,您可以使用多进程技术,并且有一个导演流程为工人准备工作单位并收集结果。根据任务,这些工人可以用FastCGI实施,也可以使用Boost.Interprocess

与父沟通