Perl:具有共享多维哈希的线程

2023-11-21

我正在尝试在多个线程上共享多维哈希。 这个哈希保存了2个连接的密钥对,我需要知道它们是否已经连接,如果没有,我需要连接它们,如果没有,则不需要去数据库。

use threads;
use threads::shared;

my %FLUobject2param : shared    = ();

#Start a new thread for every available processor
for (my $i=0;$i<$PROCESSORS;$i++) {
    threads->new(\&handlethread);
}
#Catch if these threads end
foreach my $onthr (threads->list()) {
    $onthr->join();
}

sub handlethread{
    ...
    if(not defined $FLUobject2param{$objectID}{$paramID}){
        $dbh->getObject2Param($objectID,$paramID);
        $FLUobject2param{$objectID}{$paramID} = 1;
    }
}

我不断收到错误消息Invalid value for shared scalar在线上
if(not defined $FLUobject2param{$objectID}{$paramID}){

这显然与perl 的threads::shared 只允许您共享单个级别的共享结构有关。

我仍然如何检查该组合是否已在多个线程上使用?


大多数时候,自动生存是你的朋友,但你必须以共同的价值观来小心它。调整handlethread:

sub handlethread{
  # ...
  unless (exists $FLUobject2param{$objectID} &&
          exists $FLUobject2param{$objectID}{$paramID})
  {
      $dbh->getObject2Param($objectID,$paramID);
      $FLUobject2param{$objectID} = &share({});
      $FLUobject2param{$objectID}{$paramID} = 1;
  }
}

这是由于做一个记录的限制:

共享变量只能存储标量、共享变量的引用或共享数据的引用……

上面的代码分别检查哈希键以避免自动生存,这将在其中植入一个不共享的空哈希引用$FLUobject2param{$objectID}如果它还不存在。

在条件语句中,我们首先构建适当的脚手架,然后分配值。同样,自动生存通常会为您处理这个问题,但共享迫使我们更加深思熟虑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl:具有共享多维哈希的线程 的相关文章

  • 如何在 bash 脚本中使用并行编程/多线程?

    这是我的脚本 bin bash script to loop through directories to merge fastq files sourcedir path to source destdir path to dest fo
  • MFC:从另一个线程调用 CWnd 方法安全吗?

    其实我有两个问题 打电话安全吗SendMessage来自工作线程 Do CWnd方法 比如MessageBox 调用API函数SendMessage幕后 根据我的理解 当工作线程调用时SendMessage 它将消息推送到UI线程的消息队列
  • 合并多维数组并对在另一列中共享公共值的列值求和

    我有 3 个数组用于存储帖子 评论和点赞 这些是 JSON 字符串 comments JSON 存储用户和评论点 comments user 5 points 12 user 2 points 1 user 3 points 1 likes
  • 为什么单线程异常会导致整个程序崩溃(如何防止这种情况?)

    例如 如果我跑步 int x 0x00000 程序崩溃了 但为什么整个程序崩溃而不是单个线程崩溃呢 我创建了多个连续睡眠的线程来测试这一点 有什么方法可以让当前线程退出 而不是整个程序 在Windows上使用winapi Thanks 但为
  • 通过不同的线程使用多个 ORB(多线程多 Orb 客户端应用程序) - 如何?

    This question is related to Is it possible to have several ORB objects in the same process https stackoverflow com quest
  • 如何在没有 __hash__ 的情况下删除对象列表中的重复项

    我有一个自定义对象列表 我想从中删除重复项 通常 您可以通过定义两者来做到这一点 eq and hash 为你的对象 然后采取set的对象列表 我已经定义了 eq 但我想不出一个好的实现方法 hash 这样它对于相等的对象返回相同的值 更具
  • 如何为 bcrypt.hashpw 设置盐?

    salt yhnqazolr123098765 password bcrypt hashpw password salt repeatpassword bcrypt hashpw repeatpassword salt 我在第二行遇到错误
  • 类和互斥体

    假设我有一个类代表一些名为 foo 的数据结构 class foo public foo attr01 0 void f attr01 5 private int attr01 class fooSingleThreadUserClass
  • RabbitMQ-在一个应用程序进程中为单个队列创建多个消费者是一种好习惯吗

    我刚刚处理一个由 RabbitMQ 支持的新项目 并且在应用程序启动时创建了多个监听同一个队列的消费者实例 然而 它们与不同的渠道共享相同的连接 来自队列的消息非常庞大 一次生成行为有数百万条消息 因此我猜第一个代码作者正在尝试做一些事情来
  • 具有阻塞功能的 Twisted LoopingCall

    我有一个应用程序需要轮询数据库以了解可能的配置更改 该应用程序是一个使用 Twisted 的简单 xmlrpc 服务器 我尝试过使用Twisted的LoopingCall来执行轮询 但是由于LoopingCall在主线程上运行 所以对db的
  • 非阻塞方法中的饥饿

    一段时间以来 我一直在阅读有关非阻塞方法的内容 这是一段所谓的无锁计数器的代码 public class CasCounter private SimulatedCAS value public int getValue return va
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 如何从 R 运行带有特定模块的 perl 脚本?

    我可以从终端运行 perl 脚本 myperlscript pl 没有任何问题 但是 如果我尝试从 RStudio 中运行相同的 perl 脚本 则会出现以下错误 command lt myperlscript pl outputfile
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • 线程安全的异步字节队列

    我有一个回调方法 只要有新数据可用 就会调用该方法 public delegate void DataCallback byte buffer int offset int count 我想将其包装在一个实现与此类似的接口的类中 publi
  • Perl Tk 模块有哪些缺点?

    与在 Perl 中创建 GUI 的其他解决方案相比 Tk 模块有哪些缺点 我最近浏览了 Perl 的各种 gui 模块 这是我的总结 免责声明 最终我发现现有模块都不能满足我的需求 所以我开始编写自己的 gui 工具包 Tk 工作起来很不错
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • 为什么绿色线程不能在多核上工作

    在维基百科上 绿色线程 http en wikipedia org wiki Green threads被描述为通常无法在多核上运行 而没有解释原因 在多核处理器上 本机线程实现可以 自动将工作分配给多个处理器 而绿色线程 实现通常不能 我
  • 当可能存在迭代器时替换并发集合是否是线程安全的?

    我一直在阅读各种内容 似乎这应该有效 但我想确定一下 我有一个静态属性 它应该是一个缓存 加上一些与缓存数据相关的其他功能 它将实际数据存储在 ConcurrentBag 中 并且有一个 IEnumerable 方法来 过滤并 从此包中生成
  • iPhone 应用程序中的异步、同步、线程

    我正处于一个应用程序的设计阶段 该应用程序将利用 REST Web 服务 并且在使用异步 同步和线程方面遇到了困境 这是场景 假设您有三个选项可供深入研究 每个选项都有自己的基于 REST 的资源 我可以使用同步请求延迟加载每个请求 但这会

随机推荐