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 へのアクセスがアトミックでシリアル化されていることを確認するためにミューテックスを使用しているだけです。
- デッドロックにつながるこのコードの何が問題なのですか?
- これを実装するより良い方法はありますか?