在一个线程中锁定互斥体并在另一个线程中解锁它

2024-03-18

这段代码正确且可移植吗?

void* aThread(void*)
{
    while(conditionA)
    {
        pthread_mutex_lock(mutex1);
        //do something
        pthread_mutex_unlock(mutex2);
    }
}

void* bThread(void*)
{
    while(conditionB)
    {
        pthread_mutex_lock(mutex2);
        //do something
        pthread_mutex_unlock(mutex1);
    }
}

在实际的应用程序中,我有三个线程 - 两个用于向数组添加值,一个用于读取它们。我需要第三个线程在其他线程之一添加新项目后立即显示数组的内容。


它不是。如果线程 A 在线程 B 到达 mutex_lock(2) 之前到达 mutex_unlock(2),则您将面临未定义的行为。您也不能解锁另一个线程的互斥锁。

The pthread_mutex_lock 开放组基本规范 http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_lock.html这么说:

如果互斥体类型为 PTHREAD_MUTEX_NORMAL [...] 如果线程尝试解锁尚未锁定的互斥体或已解锁的互斥体,则会导致未定义的行为。

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

在一个线程中锁定互斥体并在另一个线程中解锁它 的相关文章

  • 信号量和互斥量在实现上有什么区别?

    我读到互斥锁和二进制信号量仅在一方面不同 在互斥锁的情况下 锁定线程必须解锁 但在信号量中 锁定和解锁线程可以不同吗 哪一种效率更高 假设您知道信号量和互斥体之间的基本区别 为了快速 简单的同步 请使用临界区 要跨进程边界同步线程 请使用互
  • 从命令为 pthread 引导 symfony2

    我正在尝试从 symfony 2 命令启动线程 protected function execute InputInterface input OutputInterface output parser this gt getContain
  • 在 pthread 中实现 FIFO 互斥体

    我正在尝试实现支持并发插入的二叉树 甚至可能在节点之间发生 但不必为每个节点分配全局锁或单独的互斥体 相反 分配的此类锁的数量应按线程数量使用树 因此 我最终得到了一种锁车队 http en wikipedia org wiki Lock
  • 为什么使用单个“轮次”变量简化彼得森算法不能提供进程同步?

    我正在阅读 操作系统概念 http iips icci edu iq images exam Abraham Silberschatz Operating System Concepts 9th2012 12 pdf 并尝试理解 Peter
  • 在Linux中使用命令行检查单个线程优先级

    我可以通过转到 proc pidof task 并给出来查看应用程序中使用的线程数 猫的状态 有没有办法使用命令检查Linux中各个线程的优先级 Regards Learner 运行 ps m l 它将列出所有线程和特定 PID 的优先级
  • 每个进程的最大线程数 - sysconf(_SC_THREAD_THREADS_MAX) 失败

    我试图找到 UNIX 机器上每个进程的最大线程数 并编写下面的代码来使用 sysconf include
  • pthread_create 中的多个参数

    根据 pthread create 手册页 该函数的参数是 int pthread create pthread t thread const pthread attr t attr void start routine void void
  • 将 AppMutex 与静默 Inno Setup 一起使用

    我在 Inno Setup 脚本中使用 AppMutex 来确保产品在安装更新时不再运行 这基本上工作得很好 但是 当使用 verysilent 命令参数运行此设置时 会显示一个对话框 尽管非常安静 表明程序仍在运行 应该关闭 由于程序本身
  • 将工作分配给更多线程需要更多时间,为什么?

    我有一个小的 C 程序可以计算pi用一个蒙特卡洛 http en wikipedia org wiki Monte Carlo method Introduction 模拟基本上只是测试随机点 x y 是否在圆内部或外部 近似pi我必须使用
  • 在并发读取中是否使用互斥体

    我正在 Linux 中使用 C 进行编程 并且使用 pthreads 库 我正在使用互斥体来保护一些共享变量 但我不确定在这种特定情况下是否有必要使用互斥体 我有 3 个线程 共享变量是一个字符串 全局变量 线程1更改它的值 然后线程2和线
  • std::mutex 会创建栅栏吗?

    如果我锁定一个std mutex我总会得到一个记忆栅栏吗 我不确定这是否暗示或强迫你获得栅栏 Update 根据 RMF 的评论找到了这个参考资料 多线程编程和内存可见性 http en wikipedia org wiki Memory
  • Java:除了它们所属的对象之外,同步方法还锁定什么(如果有的话)?

    现在 我不确定这是否是一个愚蠢的问题 如果是 请耐心等待 对象上的锁是 递归的 吗 e 如果两个对象在其字段中引用了第三个对象 并且一个线程正在这两个对象之一上运行同步方法 那么任何其他线程都可以访问第三个对象吗 a and b are s
  • 为什么ostringstream在多线程环境下不能很好的工作

    也许有些事情很奇怪 当我在多线程环境中使用STL ostringstream 类时 我发现每个线程的执行时间随着线程数量的增加而线性增加 我不知道为什么会这样 我尝试检查 ostringstream 源代码 但找不到任何同步代码 ostri
  • 是否可以在Java中有效地实现seqlock?

    Another question https stackoverflow com q 14660529 149138让我想知道是否seqlock http en wikipedia org wiki Seqlock可以通过Java中的易失性
  • Pthreads 与 OpenMP

    我正在使用 Linux 用 C 创建一个多线程应用程序 我不确定是否应该使用 POSIX 线程 API 还是 OpenMP API 使用两者有何优缺点 Edit 有人可以澄清这两个 API 是否创建内核级 or 用户级线程 Pthreads
  • 如何在c中创建信号量?

    我正在尝试重新创建一个 黑盒 库 在我的计算机科学课程中 当我们应该使用信号量时 在我们的纸质期末考试中 我们会得到一个 sem h 文件 有 3 个函数 一个用于创建具有初始数量令牌的新信号量 一个用于从信号量中取出令牌 一个用于将令牌放
  • 如何杀死正在运行的线程? [复制]

    这个问题在这里已经有答案了 可能的重复 杀死 pthread 中的线程 https stackoverflow com questions 2084830 kill thread in pthread 在包含线程启动的源代码之后 过了一会儿
  • 如何随时暂停 pthread?

    最近我开始将 ucos ii 移植到 Ubuntu PC 上 我们知道 在pthread的回调函数中的 while 循环中简单地添加一个标志来执行暂停和恢复是不可能模拟ucos ii中的 进程 的 如下解决方案 因为ucos ii中的 进程
  • 完成后关闭线程

    完成后如何关闭线程 比如确保没有任何东西再打开或运行 到目前为止我知道如何打开它 但是 不知道如何正确关闭它 int iret1 pthread t thread1 char message1 void multithreading1 vo
  • 模拟后 CreateMutex 失败

    这是我尝试模拟用户然后创建互斥体的代码 未创建互斥体 我收到 ERROR ACCESS DENIED 错误 void Impersonate DWORD logonType LOGON32 LOGON INTERACTIVE DWORD l

随机推荐

  • Google Drive SDK“sharedWithMe = false”搜索查询不起作用

    我正在尝试获取 我的云端硬盘 中的文件夹列表并请求 https www googleapis com drive v2 files https www googleapis com drive v2 files 使用此搜索查询 mimeTy
  • Lua 表.concat

    有没有办法使用table concat的arg 2值来表示当前表索引 eg t t 1 a t 2 b t 3 c X table concat t n 表 concat X 的所需输出 1 a n2 b n3 c n 简单的回答 不 ta
  • C# 让 Android 手机振动 100 毫秒

    上周我在手机上尝试了一些游戏 发现有些游戏使用了振动 as a feedback 对于玩家来说 当事情发生时 例如 玩家crashed撞到墙上 玩家做了一次完美的发射 玩家获得了大奖 等等 我真的很喜欢给手机一点震动或轻微摇晃 基本上可以告
  • 在 Keras IMDB 示例中使用字符串作为输入

    我正在看Keras IMDB 电影评论情感分类示例 https keras io datasets imdb movie reviews sentiment classification 以及github上对应的模型 https githu
  • 如何在 Spring 2.5 中的配置文件中连接两个 String bean

    我知道 Spring 3 0 及更高版本有 EL 但在本例中该项目使用 Spring 2 5 例如
  • 简单的演示项目 Webpack KO(带有组件) javascript

    我想用 javascript 淘汰组件构建 SPA 经过大量阅读和摆弄之后 我似乎仍然无法使用 webpack 获得一个可用的 javascript 无打字稿 淘汰 带组件 项目 我发现了一些简单的淘汰项目 但无法让它们与 webpack
  • 错误:“dimnames”的长度[2]不等于数组范围[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我对我的 R 代码做了一些修改 效果很好 但现在我有 7 个集群 而不是 3 个 layout matrix c 1 1 2 2
  • 访问firebase firestore v9中的子集合

    我正在尝试访问子集合 消息 内的 firebase firestore 文档 user gt user uid gt messages gt docRef id gt date Date now text userText userEmai
  • Kubernetes 入口控制器无法找到证书密钥

    我正在设置一个包含入口控制器证书的机密 但在检查入口日志时出现以下错误 入口日志 W0304 05 47 32 020497 7 controller go 1153 Error getting SSL certificate defaul
  • Python 中的 Perlin 噪声:噪声值压缩,需要帮助形成正弦模式

    我目前正在研究一个涉及 Python 中 Perlin 噪声生成的项目 我使用噪声库实现了 Perlin 噪声生成 并使用这些噪声类型的组合在块内生成了不同类型的噪声值 洞穴 陆地 山丘 山脉 但是 我面临着生成的噪声值的问题 噪声值没有形
  • 如何更改 ActiveAdmin 路由 ID 的限制?

    我正在对使用 ActiveAdmin 的 Rails 站点进行更改 包括将 URL 中使用的标识符更改为有意义的字符串 在 ActiveAdmin 之外 只需更改to param每个模型的方法 这还更改了为 ActiveAdmin 页面上的
  • 将 HTTP 重定向到 HTTPS

    我目前使用此代码将 HTTP 重定向到 HTTPS RewriteCond HTTPS off RewriteRule https HTTP HOST REQUEST URI R L 它正在工作 http website com http
  • PHP cURL 和 SSL 的奇怪超时

    当我尝试访问 Amazon Cloudfront 时 将 cURL 与 PHP 结合使用时遇到奇怪的超时 这似乎会影响所有失效请求 创建发行版等 cURL 要么报告接收到 0 字节 要么报告接收到很少的字节 然后超时 Operation t
  • 从脚本返回的值未分配给 jenkins 声明性管道阶段中声明的变量

    我正在努力添加用于自动化测试的詹金斯声明式管道 在测试运行阶段 我想从日志中提取失败的测试 我正在使用常规函数来提取测试结果 该函数不是詹金斯管道的一部分 这是另一个脚本文件 该函数工作正常 它构建了一个包含失败详细信息的字符串 在管道阶段
  • 多个 JVM 与单个应用程序服务器

    我正在处理一个系统 该系统为每个客户在其自己的 JVM 中运行一个 Java 应用程序 我们有大约六台专用服务器 现在总共运行着近 100 个 JVM 以及用于管理这些 JVM 的自定义脚本集 这个设置在这一点上确实显示出了它的年龄 管理如
  • 将glade文件与程序g++链接

    Glade 文件和程序文件可能会变得有点混乱 当您希望程序可移植时 这会成为一个问题 有什么方法可以将您的程序与林间空地文件绑定吗 源代码 未完成但正在运行的项目 https github com caelwithcats valuator
  • 如何在 Erlang 中执行系统命令并使用 os:cmd/1 获取结果?

    当我尝试执行以下返回错误或在 Windows 上不退出的命令时 我总是得到空列表而不是作为字符串返回的错误 例如 I get os cmd blah 而不是类似的东西 command not found os cmd blah 在 Linu
  • Git 在交互式变基中添加所有提交消息

    我运行了交互式变基以提交abcdef git rebase i abcdef 在编辑器 Vim 中我改变了所有pick hash线路到 reword hash PREFIX Original commit message使用这个 vim 命
  • 使用 fetch 进行基本身份验证(或任何身份验证)

    找不到任何相关文档 因此在我深入研究代码之前 是否有人知道在使用 fetch 发出 REST 请求时如何使用基本身份验证 https github com github fetch https github com github fetch
  • 在一个线程中锁定互斥体并在另一个线程中解锁它

    这段代码正确且可移植吗 void aThread void while conditionA pthread mutex lock mutex1 do something pthread mutex unlock mutex2 void b