可以将SDL互斥锁锁定两次吗?

时间:2016-02-11 14:54:29

标签: c multithreading sdl

当我自己测试时,我在项目中发现了一个奇怪的错误,只是看看:

#include <stdio.h>
#include <stdlib.h>
#include <NLF.h>
#include <SDL_mutex.h>

SDL_mutex *mutex;
void tt()
{
    printf("func\n");
    printf("tentando locar: %d\n", SDL_LockMutex(mutex));
    printf("locado\n");
}

int main(int arg, char *argc[])
{
    SDL_Thread *thread;
    mutex = SDL_CreateMutex();

    printf("locado : %d\n", SDL_LockMutex(mutex));

    thread = SDL_CreateThread(tt, "TestThread", NULL);

    printf("relocado : %d\n", SDL_LockMutex(mutex));
}

这是输出:

locado : 0
func
relocado : 0

也就是说,&#34;互斥&#34;首先正确锁定,然后流程进入线程函数,并且&#34;互斥锁&#34;你的东西,线程被锁定。但请注意,我没有解锁&#34; mutex&#34;。然后我尝试再次锁定主线程,它的工作原理......为什么?我应该陷入僵局.-。 奇怪...

1 个答案:

答案 0 :(得分:2)

documentation州:

  

SDL互斥体是递归的。

这意味着您可以在同一个线程中多次锁定它(并且您需要将其锁定在该线程中锁定它的次数相同,以便为另一个线程解锁)