SDL_mutex* s_lock = NULL;
SDL_cond* s_cond = NULL;
int thread_work(void* arg)
{
SDL_LockMutex(s_lock);
printf("[thread_work] in .\n");
Sleep(5000);
printf("[thread_work] 好了,知道了,我刚刚去玩了5秒,我直接 SDL_CondWait 把锁给你我自己睡觉去了。你拿到锁之后操作完了,记得1:把锁释放掉(还给我) 2:唤醒我 .\n");
SDL_CondWait(s_cond, s_lock); // 这里直接就阻塞了,等着被唤醒
printf("[thread_work] 这么早叫醒我干嘛,好了,我去其它地方玩去了 ! .\n");
SDL_UnlockMutex(s_lock);
printf("[thread_work] out .\n");
return 0;
}
#undef main
int main()
{
s_lock = SDL_CreateMutex();
s_cond = SDL_CreateCond();
SDL_Thread* t = SDL_CreateThread(thread_work, "thread_work", NULL);
for (int i = 0; i < 2; i++)
{
Sleep(1000);
printf("[main] for里的2次循环 每次间隔2秒 \n");
}
printf("[main] 老大我的工作做完了,我现在 SDL_LockMutex 就等着拿锁干你交代的第二个工作了,就等你给锁了. \n");
SDL_LockMutex(s_lock); // 阻塞,直到获取为止,1.等别人 SDL_UnlockMutex 2.等别人 SDL_CondWait (这种方式你到时候记得解锁了还要唤醒别人)
// 干第二个工作...
SDL_UnlockMutex(s_lock); // 解锁
SDL_CondSignal(s_cond); // 发送信号唤醒别人之前,请先把lock接掉。因为别人醒来之后也是之前有锁的状态,你不释放说不过去吧
printf("[main] O 了 O 了, 我也走了 .... \n");
SDL_WaitThread(t, NULL);
SDL_DestroyMutex(s_lock);
SDL_DestroyCond(s_cond);
return 0;
}
标签:CondWait,thread,lock,work,cond,CondSignal,printf,SDL From: https://www.cnblogs.com/fxw1/p/17637240.html