我从 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的访问是原子化和串行化的。
- 这段代码有什么问题会导致死锁?
- 有没有更好的实现方法?
lock
上调用了pthread_mutex_init
函数? - Nemo