//B线程
while(true){
unique_lock<std::mutex> lock(mutexlock);
.............这里耗时可以不计.............
lock.unlock();
.......................................
}
//用户线程调用start
void start(){
auto start=GetTickCount();
unique_lock<std::mutex> lock(mutexlock);//
cout<<"抢到锁耗时"<<GetTickCount()-start;
}
由于B线程里频繁抢锁导致
用户线程调用start时候要平均600多毫秒才能抢到锁,如何做能尽量减少
这个时间,最好降到5毫秒内。我粗略想的 是 调用start时候用一个内核事件让B暂停一下
用一个变量去统计有没有用户线程在请求资源,有的话,其他次要线程暂时不获取(最好设置一个不获取的上限)
增加一个条件判断用户线程是否需要锁,如果需要直接分配给用户线程,否则随机分配
线程调度机制由运行的系统决定,而不是由编程语言决定。
可能有效的办法:
1. 调高用户线程优先级,或者调低B线程优先级。
2. B线程在unlock之后,调用一次sleep(0),主动引发一次线程阻塞事件。