【问题标题】:Setting priorities for pthreads with mutex使用互斥锁为 pthread 设置优先级
【发布时间】:2013-12-23 06:33:33
【问题描述】:

我很好奇您如何使用 C 中的互斥锁为 pthread 设置优先级。我想确保我的线程按照它们应该基于某些优先级值的顺序接收锁。我做了一点挖掘,发现了

pthread_mutexattr_getprotocol()

pthread_mutexattr_setprotocol()

这是完成我想做的事情吗?谢谢。

【问题讨论】:

    标签: c synchronization pthreads mutex


    【解决方案1】:

    我看不出互斥锁在哪里适合 - 线程优先级

     pthread_setschedparam(pthread_t thread, int policy,
                             const struct sched_param *param);
       pthread_getschedparam(pthread_t thread, int *policy,
                             struct sched_param *param);
    

    试试这些。假设我明白你想要什么......

    尝试pthread_barrier_wait 强制线程等待其他人完成某事。

    【讨论】:

    • 经过更多搜索后,我意识到我列出的两个不相关。假设有 10 个线程试图获取互斥锁。我希望它能够按照设定的优先级将互斥锁分配给线程。这还是我想要的吗?
    • 它可能会起作用,但尝试命令执行线程是一件麻烦事。 pthread_set_barrier_wait 可能是您正在寻找的。它被称为屏障同步。鉴于您的困惑,我不确定我发布的任何内容都是您想要的。但这对我来说似乎是这样。
    • @Robert,不,不完全是。基本上,这意味着持有互斥锁的较低优先级线程将获得等待互斥锁的所有线程的最高优先级(PRIO_INHERIT);或者任何线程将以较高的优先级运行,或者以 PRIO_PROTECT 初始化的任何互斥锁的优先级上限运行。这些主要是为了避免优先级反转死锁。没有什么东西(除了你自己编写的代码)能真正保证你的“线程按照它们应该的顺序接收锁”。
    • @Duck 您可以使用障碍来迫使“每个人”等待落后者,这似乎是 OP 想要的,而不是某种优先级提升。你是对的,没有办法保证线程执行的顺序。
    • 我们...就像 jim/Duck 所说,您可以自己明确地管理它。这意味着更复杂的锁结构具有内部互斥保护状态机,其中包含等待线程和它们正在等待的 condvars/semaphores 的容器。不要在家里尝试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多