如果您解鎖已經解鎖的互斥鎖,是不安全的,安全的還是未定義的行爲?如果你解鎖一個已經解鎖的互斥體,那麼這個行爲是不確定的?
該問題的目的與下面的代碼有關,我不知道在if區塊內還是在if區塊之外解鎖互斥鎖會更好。
// This chunk of code makes dual locking semi-autonomous.
int c_lckd = 0, q_lckd = 0;
if (pthread_mutex_trylock(&crunch_mutex) == 0) c_lckd = 1;
if (pthread_mutex_trylock(&queue_mutex) == 0) q_lckd = 1;
if (q_lckd && !c_lckd) { QUEUE_UNLOCK; q_lckd = 0; }
else if (c_lckd && !q_lckd) { CRUNCH_UNLOCK; c_lckd = 0; }
if (c_lckd && q_lckd) {
printf("cr = %d, max = %d, cnt = %d\n",
crunching, max_crunching, queue_count(conn_queue));
if (crunching < max_crunching && queue_count(conn_queue)) {
pthread_t tid =
pthread_create(
&tid,
NULL,
crunch_conn,
(void *)queue_dequeue(conn_queue)
);
crunching++;
}
CRUNCH_UNLOCK QUEUE_UNLOCK
}
感謝, Chenz
結果取決於您已提供鏈接的手冊頁的互斥類型。根據頁面的行爲是'未定義'或返回錯誤。 – 2015-12-09 20:25:28