如何检查SDL条件变量是否正在等待?

时间:2013-12-29 11:11:01

标签: multithreading sdl mutex conditional-statements

我正在编写SDL多线程应用程序。我的应用程序有一些线程,通过使用SDL_CondWait等待信号。

SDL_LockMutex(mutex);
SDL_CondWait(cond,mutex);
SDL_UnlockMutex(mutex);

当用户退出时,我想唤醒线程让应用程序退出。但是,当我使用SDL_CondSignal来通知条件变量时,应用程序有时会出错。

SDL_CondSignal(cond);

我猜这是因为在那一刻,条件varialbe没有等待。

我的问题是如何检查SDL条件变量是否在等待?

1 个答案:

答案 0 :(得分:2)

struct SDL_cond
{
    SDL_mutex *lock;
    int waiting;
    int signals;
    SDL_sem *wait_sem;
    SDL_sem *wait_done;
};

waiting struct字段包含被阻止的线程数。 此外,如果要唤醒所有线程,则应调用SDL_CondBroadcastSDL_CondSignal仅唤醒一个线程。