我很惊讶地看到pstack
这段代码导致了死锁!我看不出有同样的原因。
pthread_mutex_t lock;
_Cilk_for (int i = 0; i < N; ++i) {
int ai = A[i];
if (ai < pivot) {
pthread_mutex_lock(&lock);
A[ia++] = ai;
pthread_mutex_unlock(&lock);
}
else if (ai > pivot) {
pthread_mutex_lock(&lock);
A[ib++] = ai;
pthread_mutex_unlock(&lock);
}
else {
pthread_mutex_lock(&lock);
A[ic++] = ai;
pthread_mutex_unlock(&lock);
}
}
我只是使用互斥锁来确保对 A 的访问是原子的和序列化的。
- 这段代码有什么问题导致死锁?
- 有没有更好的方法来实现这一点?