首先:我完全是互斥/多线程编程的新手,所以对于任何错误提前抱歉...
我有一个运行多个线程的程序.线程(通常每个cpu核心一个)进行大量计算和"思考",然后有时他们决定调用更新某些统计信息的特定(共享)方法.通过使用互斥锁来管理统计信息更新的并发性:
stats_mutex.lock();
common_area->update_thread_stats( ... );
stats_mutex.unlock();
Run Code Online (Sandbox Code Playgroud)
现在来问题了.在所有这些线程中,有一个特定的线程几乎需要
实时优先级,因为它是唯一实际运行的线程.
"几乎是实时优先"的意思是:
假设线程t0是"特权者"而t1 .... t15是正常的.现在发生的是:
我需要的是:
那么,做这件事的最好(可能是最简单的)方法是什么?
我想的是有一个名为"privileged_needs_lock"的bool变量.
但我想我需要另一个互斥锁来管理对这个变量的访问...我不知道这是不是正确的方法......
附加信息:
任何想法都表示赞赏.谢谢
以下解决方案有效(三个互斥方式):
#include <thread>
#include <iostream>
#include "unistd.h"
std::mutex M;
std::mutex N;
std::mutex L;
void lowpriolock(){
L.lock();
N.lock();
M.lock();
N.unlock();
}
void lowpriounlock(){
M.unlock();
L.unlock();
}
void highpriolock(){
N.lock();
M.lock();
N.unlock();
}
void highpriounlock(){
M.unlock();
}
void hpt(const char* s){
using namespace std;
//cout << "hpt trying to get …Run Code Online (Sandbox Code Playgroud)