如果使用usleep函數導致線程卡死,可能是因為usleep函數會阻塞當前線程指定的時間。可以考慮使用其他的方法來實現暫停線程的功能,避免線程被阻塞導致卡死。
一種替代方法是使用pthread_cond_timedwait函數。該函數可以在指定的時間段內等待條件變量的發生。可以結合使用pthread_mutex來保證線程等待和喚醒的同步。
下面是一個示例代碼:
#include <stdio.h>
#include <pthread.h>
#include <time.h>
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* thread_func(void* arg) {
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 1; // 等待1秒鐘
pthread_mutex_lock(&mutex);
pthread_cond_timedwait(&cond, &mutex, &ts);
pthread_mutex_unlock(&mutex);
printf("Thread woke up\n");
return NULL;
}
int main() {
pthread_t tid;
pthread_create(&tid, NULL, thread_func, NULL);
pthread_join(tid, NULL);
return 0;
}
在上面的示例中,線程會等待1秒鐘后被喚醒。如果在1秒鐘內沒有其他線程調用pthread_cond_signal或pthread_cond_broadcast函數來喚醒該線程,線程將自動被喚醒。
這樣可以避免使用usleep函數導致線程卡死的問題。