c++ - 如何在C/C++中设置获取互斥量的优先级

标签 c++ c windows mutex multiprocessing

我有 3 个进程(同等优先级)

  1. P1
  2. P2
  3. P3(计时器)

获取互斥锁的优先级如下:P1(1优先级), P2(2优先级), P3(timer)(3优先级)

如果假设 p3 来并获得互斥体 然后 p2 来等待互斥量 在那之后 p1 来了,它也等待互斥锁

如果 p3 释放互斥量,那么 p1 应该得到互斥量而不是 p2

如何在 C 或 C++ 中执行此操作。

注意:所有进程都在具有相同优先级的线程中运行。

操作系统 - Windows Xp

最佳答案

由于线程具有相同的优先级,因此哪个线程获得锁将是相当随意的。看起来您想等待条件变量而不是使用简单的互斥体。你仍然会有一个互斥锁;条件变量是互斥体之上的概念。另一种可能性是使用同步屏障。

编辑: 使用 pthreads 接口(interface)(C 风格)使用条件变量的示例: https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal

您需要问自己一个重要问题:在所有这些等待和同步的情况下,您是否购买了任何东西?使用线程的目的是让一些事情并行运行。如果没有发生这种情况,那么您的多线程应用程序的运行速度会比应用程序根本不使用线程的情况慢。

关于c++ - 如何在C/C++中设置获取互斥量的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174543/

相关文章:

c++ - 如何将%rax中的double移到%ymm或%zmm上的特定qword位置? (卡比湖或更高版本)

c++ - 如何返回对 'empty' 对象的引用

c++ - C++ 程序中的首选用户语言

c - C中的结构内存对齐

c - 独立编译相互依赖的 C 模块

c++ - 应用程序在 freelibrary 时挂起

c++ - 在 GCC 中使用一个 C 函数编译 C++

c - C 中 Get_Next_Line 的无限循环

linux - 'ln' 脚本出现一些错误

c++ - 无法从 ffmpeg 示例运行 transcode.c