Nếu bạn mở khóa một mutex đã được mở khóa, hành vi không an toàn, an toàn hoặc không xác định?Nếu bạn mở khóa một mutex đã được mở khóa, hành vi không xác định?
Mục đích của câu hỏi liên quan đến mã sau đây, nơi tôi không biết liệu có nên mở khóa các mutex trong khối if hay ngay bên ngoài khối 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
}
Cảm ơn, Chenz
Kết quả phụ thuộc vào loại mutex theo trang người đàn ông có liên kết bạn đã cung cấp. Hành vi theo trang là 'không xác định' hoặc lỗi được trả về. –