Sau khi xem tài liệu và pthread.h
, tôi không thể tìm cách tạo pthread_mutex_timedlock sử dụng CLOCK_MONOTONIC
vì vậy tôi cho rằng đó không phải là (hiện tại) có thể. Đối với pthread_cond_timedwait, tuy nhiên, bạn có thể sử dụng mã như thế này:
pthread_condattr_t attr;
pthread_cond_t cond;
/* ... */
pthread_condattr_init(&attr);
pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
pthread_cond_init(&cond, &attr);
tôi đã bỏ qua mã lỗi kiểm tra cho rõ ràng, nhưng tất nhiên bạn nên làm điều đó.
Tôi giả sử rằng CLOCK_REALTIME
được sử dụng vì luôn có sẵn trong khi nguyên tắc CLOCK_MONOTONIC
là tùy chọn. Ngoài ra, tôi tự hỏi nếu thiết lập thời gian chờ tuyệt đối làm cho nó dễ dàng hơn để phục hồi sau khi các cuộc gọi hệ thống bị gián đoạn bởi tín hiệu và muốn. Tuy nhiên, nó có vẻ khá không nhất quán rằng đồng hồ có thể được đặt trong một số trường hợp và không phải những người khác - có thực sự cần phải là một pthread_mutexattr_setclock()
, nhưng than ôi có vẻ không phải là một. Tôi đoán bạn sẽ chỉ phải hy vọng ai đó không đặt đồng hồ!
Không phù hợp. Bạn chỉ cần đặt múi giờ miền địa phương của ứng dụng thành UTC. –
@ MahmoudAl-Qudsi No. Điều đó không ngăn đồng hồ thời gian thực của bạn thay đổi. –
Bạn có thể sử dụng một chuỗi đồng hồ đồng hồ phát sóng tất cả các biến có điều kiện đã đăng ký nếu đồng hồ nhảy lùi lại. –