nit*_*ria 5 c resources pthreads
我正按顺序获得一些资源.哪个版本更好?有人告诉我,#2导致需要更高编号资源的线程饥饿.这是真的?如果是这样,怎么样和为什么?
a[] sorted array
Run Code Online (Sandbox Code Playgroud)
1.
for(int i = 1; i < N; ++i) {
lock(mutex)
while(!resource_available[a[i]]) {
pthread_cond_wait(&cond_w[a[i]], &mutex);
}
resource_available[a[i]] = 0;
unlock(mutex)
}
Run Code Online (Sandbox Code Playgroud)
2.
lock(mutex)
for(int i = 1; i < N; ++i) {
while(!resource_available[a[i]]) {
pthread_cond_wait(&cond_w[a[i]], &mutex);
}
resource_available[a[i]] = 0;
}
unlock(mutex)
Run Code Online (Sandbox Code Playgroud)
编辑:事实证明,释放资源的顺序是有区别的,而不是上面的结构.如果你按顺序释放它们就会发生饥饿,如果相反则可能没有.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |