我正在编写SDL多线程应用程序。我的应用程序有一些线程,通过使用SDL_CondWait等待信号。
SDL_LockMutex(mutex);
SDL_CondWait(cond,mutex);
SDL_UnlockMutex(mutex);
当用户退出时,我想唤醒线程让应用程序退出。但是,当我使用SDL_CondSignal来通知条件变量时,应用程序有时会出错。
SDL_CondSignal(cond);
我猜这是因为在那一刻,条件varialbe没有等待。
我的问题是如何检查SDL条件变量是否在等待?
答案 0 :(得分:2)
struct SDL_cond
{
SDL_mutex *lock;
int waiting;
int signals;
SDL_sem *wait_sem;
SDL_sem *wait_done;
};
waiting
struct字段包含被阻止的线程数。
此外,如果要唤醒所有线程,则应调用SDL_CondBroadcast
。 SDL_CondSignal
仅唤醒一个线程。