【发布时间】:2012-05-01 15:10:43
【问题描述】:
假设我有一个互斥锁、两个线程、一个函数和一个循环(伪代码)。 功能:
void Update(){
Mutex.enter();
...// time: 10 ms
Mutex.leave();
}
Main.cpp:
void main(){
...// Starting thread
while(true)
Update();
}
线程:
void Thread(void *){
Mutex.enter();
... //
Mutex.leave();
}
但是Function调用不断,所以Mutex小时间是空闲的。线程进入 Mutex 的机会有多大?如果低,如何解决?
【问题讨论】:
-
也许在更新调用之间显式地让出处理器?例如有
pthread_yield()函数 -
您应该非常非常努力地为您的数据/代码找到一些其他设计,以消除持续调用。 Yield() 是子弹伤口上的绷带。这可能会有所帮助,但您很快就会需要手术。
-
当线程调用 Mutex.enter 时,它会阻塞,一旦其他线程调用离开,线程应该获取互斥锁,因为它是当时唯一请求它的线程。
-
只需删除
Thread功能。没有它,代码将取得与使用它一样多的进步。如果Update没有做你想做的工作,你应该修复它。如果是,那么Thread在您的代码中添加了什么?
标签: c++ multithreading mutex semaphore