C语言 暂停/恢复另一个线程



我知道互斥可以是一个实现,但我想知道有一种方法来暂停/恢复另一个线程,如在视频播放。当另一个正在运行的线程很复杂时,这种方法更容易编程。

有SIGTSTP,一种暂停进程的信号,如果您有两个进程,您可以使用它,但是信号有几个缺点,所以我不建议使用它们。对于一个受控的、稳定的方法,您必须自己使用互斥锁,用户暂停播放导致锁定互斥锁,执行播放的线程尝试锁定互斥锁。这样的:

static pthread_mutex_t mutex;
/* UI thread */
void g(void)
{
    while(1) {
        get_input();
        if(user_wants_to_pause)
            pthread_mutex_lock(&mutex);
        else if(user_wants_to_resume)
            pthread_mutex_unlock(&mutex);
    }
}
/* rendering thread */
void f(void)
{
    while(1) {
        pthread_mutex_lock(&mutex);
        /* if we get here, the user hasn't paused */
        pthread_mutex_unlock(&mutex);
        render_next_frame();
    }
}

如果你需要在两个线程之间进行更多的通信,你可以使用标准的IPC机制,如管道——然后你可以基于此实现暂停和恢复。

最新更新