【发布时间】:2011-01-23 23:18:13
【问题描述】:
我正在按递增顺序获取一些资源。哪个版本更好?有人告诉我,#2 会导致需要更高编号资源的线程饥饿。这是真的?如果是,如何以及为什么?
a[] sorted array
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)
}
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)
编辑: 事实证明,您释放资源的顺序会有所不同,而不是高于构造。如果您按照收到它们的顺序释放它们,则会发生饥饿,如果相反,则可能不会。
【问题讨论】:
-
那里不应该有
acquire_resource(a[i])的电话吗?