MATLAB 中的信号量和锁

2023-11-25

我正在开发一个 MATLAB 项目,希望有两个 MATLAB 实例并行运行并共享数据。我将调用这些实例MAT_1 and MAT_2。更具体地说,该系统的架构是:

  1. MAT_1按顺序处理图像,使用以下命令一一读取它们imread,并使用输出每个图像的结果imwrite.
  2. MAT_2读取图像输出MAT_1 using imread并将其结果输出到其他地方。

我认为我需要解决的问题之一是保证MAT_2读取图像输出MAT_1 once MAT_1已完全完成对它的写入。

我的问题是:

  1. 您将如何解决这个问题?我是否需要使用信号量或锁来防止竞争条件?
  2. MATLAB 是否提供任何锁定文件的机制? (即类似于flock,但由 MATLAB 直接提供,并且可以在多个平台上运行,例如Windows 和 Linux)。如果没有,您知道我可以使用任何第三方库在 MATLAB 中构建此机制吗?

EDIT :

  • 正如@yoda 在下面指出的,并行计算工具箱 (PCT) 允许阻止 MATLAB 工作程序之间的调用,这非常棒。也就是说,我对不需要 PCT 的解决方案特别感兴趣。
  • 为什么我需要MAT_1 and MAT_2在并行线程中运行?:

    处理完成于MAT_2平均速度较慢(并且更容易崩溃)MAT_1,以及输出MAT_1为其他不需要等待的程序和进程(包括人工检查)提供支持MAT_2做它的工作。

答案:

  • 对于允许实现信号量但不依赖 PCT 的解决方案,请参阅下面乔纳斯的回答
  • 有关解决该问题的其他好方法,请参阅下面尤达的回答

我会使用信号量来解决这个问题;根据我的经验,PCT 的同步速度慢得不合理。

dfacto(另一个答案)有一个很好的 MATLAB 信号量实现,但它不适用于 MS Windows;我改进了那项工作,这样它就可以了。改进后的工作在这里:http://www.mathworks.com/matlabcentral/fileexchange/45504-semaphoreposixandwindows

这比与 Java、.NET、PCT 或文件锁交互的性能更好。这不使用并行计算工具箱(PCT),并且 AFAIK 信号量功能无论如何也不在 PCT 中(令人费解的是他们遗漏了它!)。可以使用 PCT 进行同步,但我尝试过的所有操作都慢得不合理。

要将此高性能信号量库安装到 MATLAB 中,请在 MATLAB 解释器中运行以下命令: mex -O -v 信号量.c

您需要安装 C++ 编译器才能将 semaphore.c 编译为二进制 MEX 文件。然后可以从 MATLAB 代码调用该 MEX 文件,如下例所示。

使用示例:

function Example()
    semkey=1234;
    semaphore('create',semkey,1);
    funList = {@fun,@fun,@fun};
    parfor i=1:length(funList)
        funList{i}(semkey);
    end
end
function fun(semkey)
    semaphore('wait',semkey)
    disp('hey');
    semaphore('post',semkey)
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB 中的信号量和锁 的相关文章

  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 如何在 Matlab 中使用谷歌翻译?

    我正在编写一个程序 使用 Matlab 列出电影字幕文件中的所有唯一单词 现在我有一个独特的单词列表 我想将其翻译成我的语言并在观看电影之前了解其含义 有谁知道如何在 Matlab 中使用 Google Translate 以便完成我的脚本
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • MATLAB 教程中的 SIFT 实现

    我正在寻找 MATLAB 中的一些基本 SIFT 实现 我需要从第一原则来写它 另外 我正在寻找一些可以解释程序中发生的事情的内容 Vedali 的代码和 David Lowe 的代码超出了我的理解范围 如果您是 Matlab 用户 您一定
  • OpenMP while 循环中的手动同步

    我最近开始使用 OpenMP 为大学的一个项目做一些 研究 我有一个矩形且均匀分布的网格 在该网格上我使用迭代方案求解偏微分方程 因此 我基本上有两个 for 循环 网格的 x 方向和 y 方向各一个 并由 while 循环包裹以进行迭代
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 括号中的波形符字符

    在 MATLAB 中 以下代码执行什么操作 m func returning matrix 波浪号运算符 的作用是什么 在 Matlab 中 这意味着不要将函数中相应的输出参数分配到赋值的右侧 因此 如果func returning mat
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • 唤醒单个线程而不是 pthread 中的忙等待

    我不确定标题是否反映了我在这里提出的问题 但这是我在没有很长的标题的情况下能做的最好的事情 我正在尝试实施一个worker thread模型中pthreads 我想从中产生一组线程main函数以及此后的main线程将工作委托给工作人员 并等
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • Matlab 的 imresize 函数中用于插值的算法是什么?

    我正在使用 Matlab Octaveimresize 对给定的二维数组重新采样的函数 我想了解如何使用特定的插值算法imresize works 我在Windows上使用八度 e g A 1 2 3 4 是一个二维数组 然后我使用命令 b
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标

随机推荐

  • 使用 React Native Google Maps Directions 包自动启动导航

    我有一个要求 在加载谷歌地图应用程序时 必须自动启动导航 当前场景 它显示路线 但用户必须单击start开始导航 我找不到与之相关的任何标志 找到这篇文章 其中显示了谷歌地图中使用的标志 谷歌地图官方文档显示将其用作dir action n
  • 如何删除R中的空列?

    我有一个 CSV 文件 Identity Number Data Result Add 1 4 55 92 62 3 7 43 12 74 7 3 58 52 64 0 6 10 22 96 3 8 13 92 22 如何删除R中的空列 所
  • 修补 Magento 1.7.1 Hunk #1 时出错

    我看到最后一个Critical Reminder我的 Magento 仪表板 v 1 7 0 2 中的通知 2 important security patches SUPEE 5344 and SUPEE 1533 因此 我在其他 Mag
  • 错误 ::0 找不到引用的切入点注释

    我正在尝试创建一个方面来监视某些方法的时间执行 当我尝试运行测试时 出现以下错误 Caused by java lang IllegalArgumentException error at 0 can t find referenced p
  • 选择不同的 mongodb C#

    我必须从简单的 mongo db 数据库中选择不同的记录 我有很多简单的记录 这些记录如下所示 word some text 我的代码很简单 const string connectionString mongodb localhost v
  • Java 8 - 如何访问封装为 lambda 的对象和方法

    在 Java 中 您可以 捕获 对象上的方法调用 作为 Runnable 如下例所示 稍后 访问 Runnable 的这个实例 是否可以实际访问 捕获的 对象和被调用方法的方法参数 如果可能 这可能需要通过反射来完成 例如 class So
  • 是否存在具有编程语言本地化版本的编译器?

    我经常想知道为什么非英语程序员在编程时被迫使用不同的语言 而提供一个可以用本地化版本替换关键字的 IDE 似乎很容易 为什么德国人不能使用 w hrend macht 循环 日本 德国 法国 西班牙 博茨瓦纳的程序员只是广泛使用宏 定义语句
  • 根据另一个向量对点向量进行排序

    我正在开发一个 C 应用程序 我有 2 个点向量 vector
  • 显示:表格与使用表格

    我想知道使用 CSS 显示属性来模拟一个非常简单的论坛系统的表格是否是一个好主意 我知道这不是一件好事 就像 2 年前那样 当时 IE 和其他浏览器可能不支持 display table table cell 等 但我认为现在所有浏览器都支
  • Keycloak 管理控制台无限期加载

    我有一个在 EKS 集群中运行的 Keycloak 服务器 我尝试将其配置为生产模式而不是开发模式 我已经设法让 SSL 与反向代理一起使用 但是当我进入管理控制台的登录页面时 它只是无限期地加载 这是我的配置 Dockerfile FRO
  • PHP 特征的 UML 表示

    我正在使用 Symfony2 Doctrine 创建项目并尝试实现特征 到目前为止 小型试用没有问题 但我通常在深入复杂项目之前先绘制 UML 类和序列图 据我所知 用于象征 PHP 特征 可以视为行为 的 UML 设计对象是什么 有什么干
  • Java Webservice 客户端 UsernameToken 相当于 PHP

    我有一个 PHP 构建的 Web 服务 它使用 UsernameToken 作为身份验证机制 我有可以访问此 Web 服务的 PHP 客户端代码 现在我需要在 Java 中执行此操作 也许你可以帮助我 可以使用以下 php 代码访问该服务
  • 静态方法是否共享其局部变量以及不同线程并发使用时会发生什么?

    C 问题 我试图确定是否可以使用静态方法 在该方法内它确实使用了一些局部变量 局部变量是否在该方法的使用中 共享 例如 如果从不同线程同时调用 使用静态方法会发生什么 一个线程是否会阻塞 直到另一个线程完成等 也许普遍的问题是 在线程应用程
  • 更改Delphi OpenDialog的目录

    该计划的一些背景 该程序使用选项卡式界面同时处理多个文件 我正在尝试更改 OpenDialog 的目录 因此每次调用打开文件时都会显示我当前正在处理的文件的目录 但即使我设置InitialDir对于文件的路径 它始终显示最后打开的文件目录
  • GlassFish 5.0 异常且端口 4848 无响应

    昨天我下载了 GlassFish 5 0 和 JDK9 当我尝试运行服务器时asadmin start domainGlassFish 发送给我例外 当我尝试使用 asadmin start domainAfter 时 我得到响应 远程服务
  • 获取 GridSearchCV 的标准差

    在 scikit learn 0 20 之前我们可以使用result grid scores result best index 以获得标准差 它返回例如 mean 0 76172 std 0 05225 params n neighbor
  • 睡眠模式和深度睡眠模式有什么区别?

    我想知道Android手机中的睡眠模式和深度睡眠模式有什么区别 以及当手机进入睡眠模式和深度睡眠模式时会有什么影响 请给我详细的答案 问候 皮克斯 正如有人在已删除的答案中所写 深度睡眠模式与休眠和启动时间没有任何关系 You should
  • 如何使用 svg/canvas 绘制不规则/手绘线?

    我想绘制一条可调整大小的垂直线 基于页面内容 但它似乎是手绘的 而不是直线 我目前正在考虑使用 SVG 或 Canvas 来实现这一点 该线将沿着我的网页的一侧延伸 因此需要在容器的顶部和底部之间可扩展 我怎样才能实现这个目标 那么你想画一
  • 如何引用数据框表达式中的多个列?

    写这个很笨拙 df a lt df b df c 有没有办法做到 相当于 with df a lt b c 我们可以用with command df a lt with df b c 另一种选择是使用attach 然而不推荐 attach
  • MATLAB 中的信号量和锁

    我正在开发一个 MATLAB 项目 希望有两个 MATLAB 实例并行运行并共享数据 我将调用这些实例MAT 1 and MAT 2 更具体地说 该系统的架构是 MAT 1按顺序处理图像 使用以下命令一一读取它们imread 并使用输出每个